mq_sendはアトミックですか?
-
10-07-2019 - |
質問
mq_sendの実行中にマルチスレッドプログラムがSIGSTOPシグナルを受信した場合、何が起こるか教えてください。
解決
mq_send
のmanページは、Linuxのシステムコールである mq_timedsend
の上に実装されていることを示しています。システムコールは一般に、成功するかしないかのどちらかという点でアトミックです。システムコールがシグナルによって中断された場合、通常の動作は-1を返し、 errno
を EINTR
に設定することです。 mq_send
にこの動作があるようです。
基本的に、 EINTR
を確認し、この方法で失敗した場合は呼び出しを再試行する必要があります。これは、 recv
や select
のようにブロックされる可能性のあるシステムコールにとって特に重要です。割り込みが発生する可能性が高いからです。
所属していません StackOverflow