如何等待给定时间x或char y设置为1。 例如,我想实现以下方法
void wait(int x, char *y){
}
如何实现这一点,因此调用此方法等待x时间或直到y不为0.以先发生者为准。
提前致谢
答案 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);