使用C中的pthread等待x时间或标志为true

时间:2015-03-04 19:01:39

标签: c pthreads

如何等待给定时间x或char y设置为1。 例如,我想实现以下方法

void wait(int x, char *y){

}

如何实现这一点,因此调用此方法等待x时间或直到y不为0.以先发生者为准。

提前致谢

1 个答案:

答案 0 :(得分:0)

您可以使用条件变量来执行此操作。等待函数可以:

void wait(int x, char *y)
{
    struct timespec deadline;

    clock_gettime(CLOCK_REALTIME, &deadline);
    deadline.tv_sec += x;

    pthread_mutex_lock(&y_lock);
    while (*y == 0) {
        if (pthread_cond_timedwait(&y_cond, &y_lock, &deadline) == ETIMEDOUT)
            break;
    }
    pthread_mutex_unlock(&y_lock);
}

然后将*y设置为0的其他地方的代码将使用pthread_cond_signal()

pthread_mutex_lock(&y_lock);
*y = 0;
pthread_cond_signal(&y_cond);
pthread_mutex_unlock(&y_lock);