Теория распараллеливания и синхронизация. Демьянович Ю.К - 105 стр.

UptoLike

§12 Программа “производитель–потребитель”,
использующая библиотеку Pthreads
В приводимой здесь программе рассматриваются независимые по-
токи Producer и Consumer, которые общаются через разделяемый
буфер data; для попеременного доступа к последнему используют-
ся семафоры empty и full. Производитель помещает в буфер числа
1, 2, . . . , numIters, а потребитель извлекает и складывает их.
Головная программа main инициализирует дескрипторы и се-
мафоры, создает упомянутые потоки и ожидает окончания их рабо-
ты. В этой программа аргументы потокам не передаются: в функ-
ции pthread_create использован адрес NULL.
1) # include < pthread.h >
2) # include < semaphore.h >
3) # define SHARED 1
4) # include < stdio.h >
5) void Producer(void); / потоки /
6) void Consumer(void);
7) sem_t empty, full; / дескрипторы глобальных семафоров /
8) int data; / разделяемый буфер /
9) int numIters;
10) / main прочитать командную строку, создать потоки /
11) int main(int args, char. argv[ ]) {
1
12) pthread_t pid, cid; / дескрипторы /
13) pthread_attr_t attr; / атрибуты потока /
14) pthread_attr_init(&attr); / инициализация атрибутов потока /
15) pthread_attr_setscope(&attr, PTHREAD_SCOPE_SYSTEM);
16) sem_init(&empty, SHARED, 1);
/ инициализация семафора sem empty = 1 /
17) sem_init(&full, SHARED, 0);
/ инициализация семафора sem full = 0 /
18) numIters = atoi(argv[1]);
19) pthread_create(&pid, &attr, Producer, NULL);
106