Составители:
§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
Страницы
- « первая
- ‹ предыдущая
- …
- 103
- 104
- 105
- 106
- 107
- …
- следующая ›
- последняя »