シグナル スレッドがシグナルを明示的にブロックしている限り、最終的には で待機しsigwait
ますが、安全です。
たとえば、次の 2 つのフローの例はどちらも安全です。
main:
create_signal_thread() // Inherits mask from main, so signals are not blocked.
block_signals()
create_more_threads() // Inherit mask from main, so signals are blocked.
signal_thread:
block_signals() // Must block signals, as this thread will wait on them.
sigwait() // Behavior is defined.
と
main:
block_signals()
create_signal_thread() // Inherits mask from main, so signals are blocked.
create_more_threads() // Inherit mask from main, so signals are blocked.
signal_thread:
sigwait() // Behavior is defined.
ただし、次の例は安全ではありません。
main:
create_signal_thread() // Inherits mask from main, so signals are not blocked.
block_signals()
create_more_threads() // Inherit mask from main, so signals are blocked.
signal_thread:
sigwait() // Behavior is undefined.
からの関連する抜粋は次のsigwait
とおりです。
set によって定義されたシグナルは、呼び出し時にブロックされsigwait();
ます。それ以外の場合、動作は未定義です。sigwait()
セット内のシグナルのシグナル アクションに対するの効果は規定されていません。