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
,因此主进程将继续。
还有另一种更好的方式吗?
感谢。
答案 0 :(得分:2)
我相信你需要的是pthread condition variable,一个同步设备:
条件(''条件变量''的缩写)是一种同步设备,它允许线程暂停执行并放弃处理器,直到满足对共享数据的某些谓词。条件的基本操作是:发出条件信号(当谓词变为真时),并等待条件,暂停线程执行,直到另一个线程发出条件信号。