Работа с асинхронными сигналами в многопоточной программе

В книге по интерфейсу программирования Linux упоминается метод работы с асинхронными сигналами в многопоточной программе:

  • Блокировка всех потоков все асинхронные сигналы, что процесс может получить. Самый простой способ сделать это заблокировать сигналы в основной поток перед любым другим потоком созданы. Каждый впоследствии создал поток унаследует копию основного маска сигнала потока.
  • создать единственный выделенный поток, который принимает входящие сигналы, используя sigwaitinfo () , sigtimedwait () или sigwait () .

Преимущество этого подхода в том, что асинхронно сгенерированные сигналы получил синхронно. Как он принимает входящие сигналы, выделенный поток может безопасно изменять общие переменные (под контролем мьютекса) и вызовите не асинхронные функции. Он также может переменные состояния сигнала и emply другой поток и взаимодействие процессов и механизмы синхронизации.

Теперь вопросы:

  1. когда ядро ​​хочет доставить сигналы, оно произвольно выбирает один из потоков внутри процесса. откуда он может знать, что доставлять сигнал в выделенный поток?
  2. API pthread не является безопасным для aync функциями. так как же мы можем использовать их внутри обработчика сигналов?
12
задан Majid Azimi 3 June 2011 в 05:08
поделиться