有没有办法从另一个线程更改线程的信号掩码? 我应该编写一个多线程C应用程序,它不使用互斥锁,信号量和条件变量,只使用信号。
所以它看起来像这样: 主线程将SIGUSR1发送到其进程,并且2个线程中的一个(不包括主线程)将响应该信号并阻止来自sigmask的SIGUSR1并休眠。然后主线程再次发送SIGUSR1,另一个线程将响应,从其sigmask中阻止SIGUSR1,从其他线程sigmask中解锁SIGUSR1,因此它将再次响应SIGUSR1。
所以基本上每当主线程发送SIGUSR1时,另外两个线程就会相互交换。
有人可以帮忙吗?
答案 0 :(得分:1)
您可能正在寻找从主线程调用的pthread_sigqueue(3)
,以及子线程中的sigwait(3)
或sigtimedwait(2)
。
答案 1 :(得分:0)
线程只能修改自己的信号掩码(通过pthread_sigmask()
)。如果你想修改另一个线程的信号掩码,你必须自己编写代码,让其他线程去做。
此处正在向此流程发送信号,因此kill()
或sigqueue()
是要使用的功能。后者将避免将多个信号合并在一起,这可能发生在kill()
。