Хабаровский Государственный Технический Университет
Лабораторная работа №4 по дисциплине
“Операционные системы”
Выполнил: ст.гр. ПО-11
Аюпов А.М.
Проверил: Сорокин Н. Ю.
Хабаровск 2004 г.
1. Цель работы
Изучение создания, контроля и завершения потоков в ОС Linux. Знакомство с функциями ОС Linux, относящимся к работе с потоками.
2. Ответы на вопросы
1. Программа запускает параллельно несколько потоков и обращается к глобальной переменной в каждом запущенном потоке. В конце выполнения, программа выводит эту глобальную переменную.
2. Различные результаты получаются вследствие того, что между запущенными потоками нет синхронизации. Обращение последующего потока изменяет значение глобальной переменной на другое, отличное от значения, которое было у предыдущего потока.
3. Текст и результаты работы программы
#include <stdio.h>
#include <pthread.h>
void *PrintTread(void * i)
{
int t,num;
printf(" I'm thread number %d\n",i);
for(t=1;t<11;t++){printf(" %d",t);}
printf("\n");
pthread_exit(NULL);
}
void *kidfunc(void * quantity)
{
pthread_t maskids[12];
int i,koll,error;
koll = (int)quantity;
printf(" Start Second thread.\n");
for(i=0;i<koll;i++)
{
error = pthread_create(&maskids[i],NULL,PrintTread,(void *)i);
if (error<0)
{
printf("Error:return code pthread_create: %d\n",error);
exit(-1);
}
}
printf(" End Second thread.\n");
pthread_exit(NULL);
}
int main()
{
pthread_t kid;
int quantity = 12, errorcode1;
printf("Start Main thread.\n");
pthread_create (&kid,NULL,kidfunc,(void *)quantity);
errorcode1 = pthread_join (kid, NULL);
if (errorcode1<0)
{
printf("Error.Thread is complete whith error: %d\n",errorcode1);
exit(-1);
}
printf("End Main tread.\n");
return 0;
}
Start Main thread.
Start Second thread.
I'm thread number 0
1 2 3 4 5 6 7 8 9 10
I'm thread number 1
1 2 3 4 5 6 7 8 9 10
I'm thread number 2
1 2 3 4 5 6 7 8 9 10
I'm thread number 3
1 2 3 4 5 6 7 8 9 10
I'm thread number 4
1 2 3 4 5 6 7 8 9 10
I'm thread number 5
1 2 3 4 5 6 7 8 9 10
I'm thread number 6
1 2 3 4 5 6 7 8 9 10
I'm thread number 7
1 2 3 4 5 6 7 8 9 10
I'm thread number 8
1 2 3 4 5 6 7 8 9 10
I'm thread number 9
1 2 3 4 5 6 7 8 9 10
I'm thread number 10
1 2 3 4 5 6 7 8 9 10
I'm thread number 11
1 2 3 4 5 6 7 8 9 10
End Second thread.
End Main tread.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.