Составители:
завершает свою работу вызовом
pthread_exit(value);
где value — скалярное возвращаемое значение или null.
Если требуется, чтобы родительский поток ждал завершения
работы сыновнего процесса, то следует установить
pthread_join(tid, value_ptr);
где tid — идентификатор сыновнего процесса, а value_ptr — адрес
для возвращаемого значения, которое определяется, когда сынов-
ний процесс вызывает функцию exit.
Потоки взаимодействуют через глобальные переменные; они
синхронизируются с помощью активного ожидания, блокировок,
семафоров или с помощью условных переменных.
Заголовочный файл semaphore.h содержит определения и про-
тотипы операций для семафоров.
Дескрипторы семафоров определены как глобальные относи-
тельно использующих их потоков sem_t S; дескриптор инициали-
зируется вызовом
sem_init(&S, SHARED, 1);
который позволяет семафору присвоить значение 1.
Если параметр SHARED не равен нулю, то процессы могут раз-
делять данный семафор; в противном случае (т.е. если параметр
SHARED равен нулю) — семафор может использоваться потоками
только одного процесса.
Эквивалентом операции P в библиотеке Pthread служит функ-
ция sem_wait, а эквивалентом операции V является функция
sem_post.
Этот параграф закончим одним из вариантов защиты крити-
ческой секции с использованием семафоров из библиотеки Pthread:
sem_wait(&s); / ∗ применение операции P к семафору s ∗ /
[критическая секция];
sem_post(&s); / ∗ применение операции V к семафору s ∗ /
105
Страницы
- « первая
- ‹ предыдущая
- …
- 102
- 103
- 104
- 105
- 106
- …
- следующая ›
- последняя »