我正在寻找一个多线程应用程序,其中一个线程在继续之前等待另一个线程发出信号。根据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

09-06 15:10