为什么sigwait()MT安全但sigsuspend()不是?

问题描述 投票:4回答:1

我正在寻找一个多线程应用程序,其中一个线程在继续之前等待另一个线程发出信号。根据here的说法,由于竞争条件,sigsuspend不是MT安全的。根据here,在这些情况下应使用sigwait。我想知道为什么。

根据手册页描述(sigwaitsigsuspend),它似乎......

sigsuspend (const sigset_t *mask)实际上改变了进程的信号掩码,这将影响所有线程。

sigwait (const sigset_t *set, int *sig)只是等待set中的一个指示信号而不改变线程(或进程)的信号掩码。

这种理解是否正确?如果是这样,sigwait如何阻止而不改变信号掩码?

c linux multithreading
1个回答
3
投票

实际上sigwait更改了掩码然后恢复它,请参阅此内容(UNIX环境中的高级编程):Signals and Threads

还有这个:Oracle Multithreaded Programming Guide

© www.soinside.com 2019 - 2024. All rights reserved.