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

UptoLike

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

46
Неигнорируемый сигнал, предназначенный для какого-либо потока,
доставляется только этому потоку.
Неигнорируемый сигнал, предназначенный для процесса, передает-
ся первому потоку, который не имеет блокировки для сигнала.
Если все потоки имеют блокировки для сигнала, сигнал будет по-
ставлен в очередь к процессу и будет находиться там до тех пор, пока ка-
кой-либо поток не проигнорирует или не деблокирует сигнал. При игнориро-
вании сигнал будет удален. При деблокировании сигнал будет направлен к
потоку, который его деблокировал.
На рис. 3.4 представлена схема доставки сигнала в многопоточном
приложении. При доставке сигнала прежде всего проверяется, не принад-
лежит ли он множеству игнорируемых сигналов (Signal ignore), и если это
так, то он отбрасывается. Далее просматривается таблица потоков и ищет-
ся поток, который не блокирует сигнал. Стандартная практика для боль-
шинства многопоточных процессовэто маскировать сигнал во всех пото-
ках, кроме одного, который ответствен за его обработку. Для увеличения
эффективности процедуры доставки сигнала ядро будет кэшировать по-
следний поток, принявший сигнал, и будет всегда пытаться доставить сиг-
нал вначале к этому потоку. Если сигнал не принадлежит множеству игно-
рируемых сигналов, но блокирован всеми потоками, то он ставится в оче-
редь к процессу (Process Signal queue). Сигналы, которые направлены к
64
33 47
33
Сигналы, доставленные к
процессу, но блокированные
всеми потоками
Process
Thread
Thread
64…1
Д
оставленный сигнал
Очередь сигналов
к данному потоку
64…1
Блокиро-
ванные
сигналы
Блокиро-
ванные
сигналы
Очередь
сигналов
Вектор
потоков
Рис. 3.4