Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

OS

.docx
Скачиваний:
4
Добавлен:
12.11.2016
Размер:
31.01 Кб
Скачать

Министерство образования и науки Украины

Харьковский национальный университет радиоэлектроники

Кафедра ИУС

Контрольная работа по курсу

,, Операционные системы

Вариант № 2

Выполнил: студент Проверил:

группы КНз-13-1 проф. С. Ф. Чалый

В. В. Гвоздецкий

12.04.2015

Харьков 2015

Задание: написать многопоточное приложение.

Список исходных файлов:

  • main.cpp

  • get_file.h

  • init.h

  • counter.h

  • article.txt

Файл main.cpp

#include <stdio.h>

#include <pthread.h>

#include <unistd.h>

#include "get_file.h"

#include "counter.h"

int main((int argc,char *argv[])

{

pthread_mutex_init(&mp,NULL);

pthread_create(&main_thread,NULL,get_array,NULL);

sleep(1);//Ждем пока текст не будет в массиве

int w;

for(w=0;w<NUM_OF_THREADS;w++)

{

status=pthread_create(&go_ch[w],NULL,count_ch,(void *)w);

if(status!=0)

perror("Thread not created!");

}

pthread_join(main_thread,NULL);//Запись в массив и его чтение

for(w=0;w<NUM_OF_THREADS;w++)

pthread_join(go_ch[w],NULL); //Дожидаемся подсчета символов в тексте

printf("\n \t ---- Threads complete!!! ----\n");

pthread_mutex_destroy(&mp);

return 0;

}

Файл init.h

#define NUM_OF_THREADS 6

#define len 2084

char *arr = new char[len];//Выделяем память под массив

int s, status, n, k=0;

char ch[7]={'l','i','k','e','p','c','\0'};

pthread_mutex_t mp=PTHREAD_MUTEX_INITIALIZER;

pthread_t go_ch[NUM_OF_THREADS],main_thread;

Файл get_file.h

#include "init.h"

void *get_array(void *)

{

pthread_mutex_lock(&mp);//установка блокировки

FILE* fp = fopen("article.txt", "r");

for(s=0;s<len;s++)

arr[s]=fgetc(fp);//Считываем посимвольно изменяя глобальную переменную

fclose(fp);

printf("\t Read text success!\n\t Loading the text...\n");

sleep(1);//Пауза перед отображением

puts(arr);

pthread_mutex_unlock(&mp);//снятие блокировки

pthread_exit(NULL);

}

Файл counter.h

void *count_ch( void *id)

{

pthread_mutex_lock(&mp);//Захват мьютекса

int idn=(int)id;

for(n=0;n<len;n++)

{

if(arr[n]==ch[idn])

k++;

}

printf("Symbol %c find in text: %d\n",ch[idn],k);

k=0;

pthread_mutex_unlock(&mp);//установка разблокировки мьютекса

pthread_exit(NULL);

}

Результат выполнения