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
中也有很好的方法吗?