私はLinuxシステム上で自分のアプリケーションに4 pthread
を持っています。シグナルハンドラ関数でローカルミューテックスを使用して共有データを同期する
SIGTERM
は3つのスレッドでブロックされ、シグナルハンドラ機能では1つのスレッドのみが処理されます。私は以下のコードは、mutexがシグナルハンドラ関数でローカルに作成され、主にそれを基にして何かをする必要のある別のスレッドに共有データ変数への変更をプッシュするためにのみ使用されるので安全だと思います。
私の理解は正しいですか?
void sig_handler_sigterm()
{
mutex * m = new mutex;
mutex_lock(m);
//update shared data, the change needs to reflect in another thread
mutex_unlock(m)
sleep(2);
exit(1);
}
ローカルミューテックスは無意味です。ミューテックスは複数のスレッドが*ロック/アンロックする場合にのみ有効です。 – kaylum
シグナルハンドラ内から 'exit()'を呼び出すことも安全です。これは非同期シグナル安全ではありません。 –
ミューテックスのロック/アンロック機能がメモリの獲得/解放を保証し、共有データが他のスレッドにプッシュされることは本当ですか? – medicine28