1

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

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

因此,基本上每当主线程发送 SIGUSR1 时,其他两个线程就会相互交换。

有人可以帮忙吗?

4

2 回答 2

1

You are probably looking for pthread_sigqueue(3) called from the main thread, and sigwait(3) or sigtimedwait(2) in the child thread(s).

于 2012-10-28T23:11:18.983 回答
0

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

信号被发送到这里的进程,所以kill()或者sigqueue()是要使用的函数。后者将避免将多个信号合并在一起,这可能发生在kill().

于 2012-10-29T17:11:40.720 回答