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

C 唤醒睡眠线程,否则睡眠N秒,c,multithreading,pthreads,C,Multithreading,Pthreads,我正在用POSIX线程编写一个C程序 设N为全局变量。我有一个线程调用sleep(N)。然后,另一个线程会更改N的值。如何让我原来的名为sleep(N)的线程唤醒,并在新的N值上再次调用sleep 换言之,我想为N休眠,如果N得到更新,则为N的新值唤醒和休眠 我已经研究了pthread_cond_wait和pthread_cond_timedwait,但我认为它在我的情况下并不有用,因为我需要线程在特定的时间内休眠。我需要我的线程每N秒持续睡眠和醒来 正如user1930928在下面显示的那样,

我正在用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();
}

请根据上面的框架是否与您的请求匹配来澄清您的问题。

尝试,如果这证明很麻烦,请问另一个问题。一点也不明白,您想让线程为更新的N值进行睡眠吗?是的,为N进行睡眠,或者如果N得到更新,则为新的NYes值进行唤醒和睡眠这就是我想要的。显然我不理解pthread_cond_timedwait。不管怎样,你能把它变成实际的代码吗?