POSIX线程和信号掩码

时间:2012-10-28 22:58:01

标签: c multithreading signals posix mask

有没有办法从另一个线程更改线程的信号掩码? 我应该编写一个多线程C应用程序,它不使用互斥锁,信号量和条件变量,只使用信号。

所以它看起来像这样: 主线程将SIGUSR1发送到其进程,并且2个线程中的一个(不包括主线程)将响应该信号并阻止来自sigmask的SIGUSR1并休眠。然后主线程再次发送SIGUSR1,另一个线程将响应,从其sigmask中阻止SIGUSR1,从其他线程sigmask中解锁SIGUSR1,因此它将再次响应SIGUSR1。

所以基本上每当主线程发送SIGUSR1时,另外两个线程就会相互交换。

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

您可能正在寻找从主线程调用的pthread_sigqueue(3),以及子线程中的sigwait(3)sigtimedwait(2)

答案 1 :(得分:0)

线程只能修改自己的信号掩码(通过pthread_sigmask())。如果你想修改另一个线程的信号掩码,你必须自己编写代码,让其他线程去做。

此处正在向此流程发送信号,因此kill()sigqueue()是要使用的功能。后者将避免将多个信号合并在一起,这可能发生在kill()