[英]Wake up a sleeping thread, else sleep for N seconds
我正在使用POSIX线程编写C程序。
令N为全局变量。 我有一个线程调用sleep(N)。 然后,另一个线程将更改N的值。如何唤醒我原来的称为sleep(N)的线程,并在新的N值上再次调用sleep?
换个说法,如果N更新,我想睡觉N,醒来,然后为N的新值睡觉。
我已经研究了pthread_cond_wait和pthread_cond_timedwait,但是对于我来说这并不有用,因为我需要线程在特定时间内保持睡眠状态。
我需要我的线程连续睡眠并每N秒唤醒一次。
如下面的user1930928所示,我认为我需要使用pthread_cond_timedwait
这个问题和目标对我来说还不清楚...但是让我提供一个代码框架,以便您可以更好地阐明您的问题。
Initialize N.
Initialize mutex.
Initialize CV.
T1()
{
mutex_lock();
while (1) {
copy_of_N = N;
pthread_cond_timedwait(N); // drops the mutex
....
....
// timed wait done OR wakeup was issued on cond var
if (copy_of_N != N) {
// N was changed
do_something();
} else {
// N was not changed
do_something_else();
}
// either way, goto sleep on N.
}
mutex_unlock();
}
T2()
{
mutex_lock();
change N;
pthread_cond_signal();
mutex_unlock();
}
请根据以上框架是否符合您的要求来澄清您的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.