3

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 つのスレッドでのみ実行されるようにする方法に関するヒントはありますか? 助けてくれてありがとう。

4

1 に答える 1

4

ここで実装が修正されたようです:

https://android.googlesource.com/platform/bionic/+/9bf330b5676d0f60b3e4c3b8985494bcb1134e8b

代わりに sigprocmask() を使用できる場合がありますが、マルチスレッド プロセスの動作は公式には定義されていません。

于 2012-12-10T23:59:56.823 に答える