pthread_cond_timedwait示例
时间: 2023-07-14 22:05:38 浏览: 117
pthread示例demo
下面是一个使用 pthread_cond_timedwait 的简单示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <time.h>
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
void* thread_func(void* arg) {
struct timespec ts;
clock_gettime(CLOCK_REALTIME, &ts);
ts.tv_sec += 5; // 设置等待时间为5秒
pthread_mutex_lock(&mutex);
int ret = pthread_cond_timedwait(&cond, &mutex, &ts);
if (ret == 0) {
printf("Thread woke up before timeout.\n");
} else if (ret == ETIMEDOUT) {
printf("Thread timed out.\n");
} else {
printf("Error waiting on condition variable.\n");
}
pthread_mutex_unlock(&mutex);
return NULL;
}
int main() {
pthread_t thread;
pthread_create(&thread, NULL, thread_func, NULL);
// 做一些其他的工作
pthread_cond_signal(&cond); // 唤醒等待线程
pthread_join(thread, NULL);
return 0;
}
```
在上面的示例中,主线程创建了一个新线程,然后做一些其他的工作。在等待线程函数中,它使用 clock_gettime 来获取当前时间,并在当前时间的基础上增加5秒,表示等待的超时时间。然后调用 pthread_cond_timedwait 函数等待条件变量的信号,如果在超时之前收到信号,则会打印 "Thread woke up before timeout.",如果超时,则会打印 "Thread timed out."。
在主线程中,我们调用 pthread_cond_signal 函数来唤醒等待线程。最后,我们使用 pthread_join 等待子线程结束。
请注意,这只是一个简单的示例,实际使用时需要根据具体的需求进行适当的修改和错误处理。
阅读全文