如果变量的值发生变化,则恢复程序

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() ,而不是pauseMyself()我将执行sem_wait() ,这意味着主进程将停在那里。

在线程函数中,我会在更改值后执行sem_post() ,因此主进程将继续。

还有另外一种更好的方式吗?

谢谢。

我相信你需要的是pthread条件变量 ,一个同步设备:

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