Синхронизация и взаимодействие программных потоков в операционной среде реального времени. Дорогов А.Ю. - 16 стр.

UptoLike

Составители: 

16
ся, пока не достигнет ближайшей точки завершения (cancellation point). Точ-
ками завершения являются некоторые, как правило блокирующие, вызовы
ядра и соответственно высокоуровневые функции, которые базируются на
таких вызовах.
Кроме того, любой поток может зарегистрировать специальную функ-
цию, которая будет вызываться, когда он завершается:
void pthread_cleanup_push( void (routine)(void*) // указатель к функции
void* arg ); // аргументы функции
Аргумент routine определяет имя функции, а arg – список ее входных пара-
метров.
И последнее. При использовании многопроцессорной ЭВМ количество
порождаемых для решения задачи потоков можно привязать к количеству
процессоров. Это позволит оптимизировать использование ресурсов ЭВМ.
2. Механизмы синхронизации потоков
Потоки в пределах процесса имеют общее адресное пространство. Это
означает, что если для процесса определены глобальные переменные, то
любой поток может их «видеть» и изменять.
Таблица 2.1
Механизм синхронизации
Поддерживается между ло-
кальными процессами
Поддерживается между
удаленными процессами
Мьютексы (Mutexes) Yes No
Условные переменные
(Condvars )
Yes No
Барьеры (Barriers) No No
Ждущие блокировки (Sleepon
locks)
No No
Блокировки Чтения/Записи
(Reader/writer locks)
Yes No
Семафоры (Semaphores) Yes Yes (только именованные)
FIFO-диспетчеризация (FIFO-
scheduling)
Yes No
Атомарные операции (Atomic
operations)
Yes No
Обмен сообщениями
(Send/Receive/Reply)
Yes Yes
Однако не так все просто. Может оказаться, что один поток читает дан-
ные в то время, когда другой поток их модифицирует. Это верный рецепт
для провоцирования катастрофических ситуаций в системе. Для исключе-
ния подобных случаев и предназначены механизмы синхронизации, но слу-
жат они не только для этого. Часто возникает необходимость задать после-