繁体   English   中英

唤醒睡眠线程,否则睡眠N秒

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM