Android上的pthread_sigmask无法正常工作?

时间:2012-12-08 11:41:00

标签: android android-ndk

似乎pthread_sigmask在Android上不起作用。这个问题似乎已在2年前报告here,但开发人员没有回应。我遇到了一个非常类似的问题(我的代码在下面供参考)。我做错了什么,还是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设备上也失败了。

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

1 个答案:

答案 0 :(得分:4)

看起来这里的实现已得到修复:

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

您可以使用sigprocmask()代替,但是没有为多线程进程正式定义行为。