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

时间:2014-02-28 09:04:04

标签: 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

    /* 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()的值后执行a,因此主进程将继续。

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

感谢。

1 个答案:

答案 0 :(得分:2)

我相信你需要的是pthread condition variable,一个同步设备:

  

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