多くのスレッドがシグナル(おそらくによって作成されたpthread_kill
)をスレッドに送信するとしますが、スレッドはそれらをすぐにデプロイできません。これらの信号は失われますか?他のスレッドから分散されたこれらの信号を解決するにはどうすればよいですか?参考文献や経験はありますか?検討のためのtks。
2 に答える
1
はい、彼らは「失われました」。シグナルはキューに入れられません[1]。シグナルは単に設定およびクリアされるフラグです。そのため、最初のシグナルの後、シグナルが処理される前に到着したいくつかのシグナルは効果がありません。
解決策は、メッセージの受け渡しに unix シグナルを使用するのを避けることです (実際には、ほとんどの場合)。むしろ、mutex と条件変数の助けを借りてメモリを介して通信するなど、別のものを使用することです。
[1] 少なくともいくつかの制限内でキューに入れることができるリアルタイムシグナルがあり、それらには独自の問題があります。
于 2012-12-13T16:12:25.380 に答える
0
シグナルが特定のスレッドに送信され、現在ブロックされている場合、シグナルはスレッド内で保留されたままになります。ブロックが解除された場合 (例: を介してpthread_sigmask
)、適切なシグナル アクションが実行されます。
PS。それらがキューに入れられたシグナルでない限り (参照sigqueue
)、それが複数のシグナルのうちの 1 つだけであったかどうかの情報は失われます。
于 2012-12-13T16:09:01.540 に答える