sha*_*kil 1 c linux sleep pthreads
我有一个线程在条件下运行,它有2分钟的睡眠.(即
while (condition) {
//do something
sleep(120);
}
Run Code Online (Sandbox Code Playgroud)
)
为了优雅地终止线程,我在条件为false时使用pthread_join()并制作(例如)someflag = 0
它的工作是终止线程,但是如果线程处于休眠状态,它就会在完成休眠之后终止.
这是我需要避免的问题; 我需要让线程尽早出现,即使它处于睡眠状态.
以上都不是.而不是while (condition) sleep(120);你应该使用条件变量:
while (condition) {
...
pthread_cond_timedwait(&condvar, &mutex, &abstime);
...
}
Run Code Online (Sandbox Code Playgroud)
我选择pthread_cond_timedwait假设你实际上需要醒来并且每120秒做一次事情,即使没有人发信号通知你,但如果没有,你可以pthread_cond_wait改用.信号线程pthread_cond_signal(&condvar)在更改之后需要调用condition,当然所有对状态的访问(读取和写入)都condition需要由互斥锁保护,mutex.你必须在呼叫时持有互斥锁pthread_cond_[timed]wait.如果您对如何使用条件变量有进一步的疑问,请搜索现有的问题/答案(有很多)或询问后续行动.
| 归档时间: |
|
| 查看次数: |
625 次 |
| 最近记录: |