2012-10-28 51 views
1

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

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

所以基本上每当主线程发送SIGUSR1时,两个其他线程在彼此之间交换。

有人可以帮忙吗?

回答

1

您可能正在寻找pthread_sigqueue(3)从主线程调用,sigwait(3)sigtimedwait(2)在子线程(或多个)。

+1

pthread_sigqueue将是一个完美的选择,但它只适用于Linux环境,一般不适用于posix。它不会在Mac OS上编译x – Max

+0

使用'pthread_kill'。无论如何,除了实时信号外,sigqueue并不比“kill”更好。 –

0

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

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