0

我正在使用 POSIX 线程编写 C 程序。

令 N 为全局变量。我有一个调用 sleep(N) 的线程。然后一个不同的线程改变了 N 的值。我怎样才能让调用 sleep(N) 的原始线程唤醒,并在 N 的新值上再次调用 sleep?

换句话说,我想为 N 睡觉,如果 N 得到更新,唤醒并为 N 的新值睡觉。

我已经研究了 pthread_cond_wait 和 pthread_cond_timedwait,但我认为这对我来说没有用,因为我需要线程在特定的时间内处于睡眠状态。我需要我的线程连续睡眠并每隔 N 秒醒来一次。

正如 user1930928 所示,我想我需要使用 pthread_cond_timedwait

4

1 回答 1

0

问题和目标对我来说仍然不清楚......但让我提供一个代码框架,以便您可以更好地澄清您的问题。

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();
}

请根据上述骨架是否符合您的要求来澄清您的问题。

于 2013-07-18T18:04:04.733 回答