我正在寻找一个多线程应用程序,其中一个线程在继续之前等待另一个线程发出信号。根据here,由于竞争情况,sigsuspend
不是MT安全的。根据here,在这些情况下应使用sigwait
。我想了解原因。
根据手册页描述( sigwait
和 sigsuspend
),似乎...sigsuspend (const sigset_t *mask)
实际上会更改进程的信号掩码,这会影响所有线程。sigwait (const sigset_t *set, int *sig)
仅等待set
中指示的信号之一,而无需更改线程(或进程)的信号掩码。
这种理解正确吗?如果是这样,sigwait
如何在不更改信号掩码的情况下进行阻止?
最佳答案
实际sigwait会更改掩码,然后将其还原,请参阅以下内容(UNIX环境中的高级编程):Signals and Threads。
还有这个:Oracle Multithreaded Programming Guide