sigwait() の前に信号をブロックする必要があるのはなぜですか?

sigwait() の前に信号をブロックする必要があるのはなぜですか?

APUE第12章454ページでは、次のように述べています。

誤動作を防ぐには、スレッドが待機している信号をブロックする必要があります。

標準にも同様の内容があります。

信号は次のように定義されます。置く呼び出されたらブロックしなければなりませんでした。シグウェイト();それ以外の場合、動作は定義されません。

このテキストでは、どのバグ/未定義の動作について説明しますか?標準に近い、またはアプリケーションの使用法を見つけることができず、本の説明を理解するのが困難です。

信号がブロックされていない場合...呼び出しが完了する前に信号がスレッドに転送されるタイミングウィンドウが開きますsigwait

ベストアンサー1

これはから来たものですqnx ドキュメントただし、すべてのUnixおよびUnixファミリーディストリビューションに関連しています。

sigwait() を呼び出す前に、セット定義信号をブロックする必要があります。ブロックしないと、コールが行われる前にシグナルが転送され、コールがブロックされる可能性があるため、競合状態が発生します。

おすすめ記事