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