gpt4 book ai didi

c - 当线程处于 sleep 状态并且需要优雅地关闭时,使用 pthread_join、pthread_exit 或 pthread_cancel 做什么?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:19:53 25 4
gpt4 key购买 nike

我有一个线程在有条件的情况下运行,它有 2 分钟的休眠时间。(即

while (condition) {
//do something
sleep(120);
}

)

为了优雅地终止线程,我使用了 pthread_join() 并将 while 条件设置为 false(例如 someflag = 0)

它的工作是终止线程,但如果线程正在休眠,它不会终止,直到它完成休眠。

这是我需要避免的问题;即使处于 sleep 状态,我也需要让线程早点出来。

最佳答案

以上都不是。而不是 while (condition) sleep(120); 你应该使用条件变量:

while (condition) {
...
pthread_cond_timedwait(&condvar, &mutex, &abstime);
...
}

我选择了 pthread_cond_timedwait,假设您实际上需要每 120 秒醒来并做一些事情,即使没有人向您发出信号,但如果没有,您可以只使用 pthread_cond_wait。信号线程需要在改变condition后调用pthread_cond_signal(&condvar),当然还有所有访问(读写)状态condition 取决于需要受互斥体保护,mutex。您必须在调用 pthread_cond_[timed]wait 时保持互斥锁。如果您对如何使用条件变量有更多疑问,请搜索现有问题/答案(有很多)或询问后续问题。

关于c - 当线程处于 sleep 状态并且需要优雅地关闭时,使用 pthread_join、pthread_exit 或 pthread_cancel 做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31761993/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com