3

看来 pthread_sigmask 在 Android 上不起作用。这个问题似乎早在 2 年前就已经在这里报告过了,但开发人员没有做出任何回应。我遇到了一个非常相似的问题(我的代码如下供参考)。我做错了什么,还是Android NDK有问题?以及关于如何使用两个线程来处理仅限于线程的特定信号的任何提示/帮助?

我在 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 设备上也失败了。

关于如何确保特定信号的信号处理程序仅在一个线程上运行的任何提示?提前感谢您的帮助。

4

1 回答 1

4

看起来这里的实现是固定的:

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

您也许可以使用 sigprocmask() 代替,尽管该行为并未针对多线程进程正式定义。

于 2012-12-10T23:59:56.823 回答