Android では pthread_sigmask が機能しないようです。この問題はここで2 年前に報告されたようですが、開発者からの応答はありません。私は非常によく似た問題に遭遇しています(参照用に以下の私のコード)。何か間違ったことをしていますか、それとも Android NDK の問題ですか? また、スレッドに制限された特定のシグナルの処理で2つのスレッドを使用する方法に関するヒント/ヘルプはありますか?
このコードを Android 2.2 で実行しています。
// block the signal in this thread
sigset_t signals;
sigemptyset(&signals);
sigaddset(&signals, SIGALRM);
int ret = pthread_sigmask(SIG_BLOCK, &signals, NULL);
if (ret) {
LOG("pthread_sigmask failed. %d", ret);
}
エラー 22 (EINVAL) が発生します。SIG_UNBLOCK でも同じエラーが発生します。
更新: 4.1 デバイスで動作するようです。4.1 で試してみましたが、成功したようです。2.3 および 4.0 デバイスでも失敗しました。
特定のシグナルのシグナルハンドラが 1 つのスレッドでのみ実行されるようにする方法に関するヒントはありますか? 助けてくれてありがとう。