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

时间:2013-07-18 17:17:11

标签: c multithreading pthreads

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

设N是全局变量。我有一个调用sleep(N)的线程。然后一个不同的线程改变N的值。我怎样才能让我的原始线程叫做sleep(N)唤醒,然后再次调用N的新值?

要改写,我想睡N,如果N得到更新,醒来,并睡觉N的新值。

我已经研究过pthread_cond_wait和pthread_cond_timedwait,但我不认为它在我的情况下有用,因为我需要线程在特定的时间内睡着。我需要我的线程连续睡眠并且每N秒唤醒一次。

正如用户1930928所示,我认为我需要使用pthread_cond_timedwait

1 个答案:

答案 0 :(得分: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();
}

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