В книге по интерфейсу программирования Linux упоминается метод работы с асинхронными сигналами в многопоточной программе:
- Блокировка всех потоков все асинхронные сигналы, что процесс может получить. Самый простой способ сделать это заблокировать сигналы в основной поток перед любым другим потоком созданы. Каждый впоследствии создал поток унаследует копию основного маска сигнала потока.
- создать единственный выделенный поток, который принимает входящие сигналы, используя
sigwaitinfo ()
,sigtimedwait ()
илиsigwait ()
.Преимущество этого подхода в том, что асинхронно сгенерированные сигналы получил синхронно. Как он принимает входящие сигналы, выделенный поток может безопасно изменять общие переменные (под контролем мьютекса) и вызовите не асинхронные функции. Он также может переменные состояния сигнала и emply другой поток и взаимодействие процессов и механизмы синхронизации.
Теперь вопросы: