C++ 如果变量为';s值变化

C++ 如果变量为';s值变化,c++,c,events,signals,semaphore,C++,C,Events,Signals,Semaphore,在c/c++中是否有方法暂停程序(可能是使用SIGSTOP),然后在另一个线程更改某个变量的值时继续(SIGCONT?)它 例如: int main(void) { int a = 0; createThread(&a); //creates a thread which will change a's value pauseMyself(); //pauses main process till a's value is changed /* ma

c
/
c++
中是否有方法暂停程序(可能是使用
SIGSTOP
),然后在另一个线程更改某个变量的值时继续(
SIGCONT
?)它

例如:

int main(void) {

    int a = 0;
    createThread(&a); //creates a thread which will change a's value

    pauseMyself(); //pauses main process till a's value is changed

    /* main process gets here only when a's value has been changed */

    fprintf(stderr, "a's value has been changed\n");

    return 0;
}
我想看看是否有可能,这样我就不需要在每个间隔对
a
的值进行采样-就像
while()
循环,它每200ms检查
a
的值(睡眠200ms)

此问题的一个可能解决方案是使用信号量:

我应该将信号量值初始化为
0
(!), 然后在
main()
中,我将执行
sem\u wait()
,而不是
pauseMyself()
,这意味着主进程将在此停止

在线程函数中,我将在它更改
a
的值后执行
sem\u post()
,因此主进程将继续

还有其他更好的方法吗


谢谢。

我相信您需要的是同步设备:

条件(condition variable)是一种同步设备,它允许线程暂停执行并放弃处理器,直到满足共享数据的某个谓词。对条件的基本操作是:发出条件信号(当谓词变为true时),然后等待条件,暂停线程执行,直到另一个线程发出条件信号


看看c++11的std::condition\u变量。。。您需要同步(用锁保护)对“a”的写访问才能使用它。非常感谢!在
C
中也有很好的方法吗?