pthread_cond_timedwait 使用的例子
时间: 2024-04-12 22:23:45 浏览: 192
pthread_cond_timedwait函数是POSIX线程库中用于等待条件变量的函数之一。它可以在指定的时间内等待条件变量的状态发生变化。
下面是一个使用pthread_cond_timedwait函数的例子:
```c
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
pthread_mutex_t mutex;
pthread_cond_t cond;
void* thread_func(void* arg) {
pthread_mutex_lock(&mutex);
printf("Thread waiting...\n");
struct timespec timeout;
clock_gettime(CLOCK_REALTIME, &timeout);
timeout.tv_sec += 5; // 设置等待时间为5秒
int result = pthread_cond_timedwait(&cond, &mutex, &timeout);
if (result == 0) {
printf("Thread woken up!\n");
} else if (result == ETIMEDOUT) {
printf("Thread timed out!\n");
} else {
printf("Thread wait error!\n");
}
pthread_mutex_unlock(&mutex);
return NULL;
}
int main() {
pthread_t thread;
pthread_mutex_init(&mutex, NULL);
pthread_cond_init(&cond, NULL);
pthread_create(&thread, NULL, thread_func, NULL);
sleep(2); // 等待2秒,确保子线程已经开始等待
pthread_mutex_lock(&mutex);
printf("Main thread signaling...\n");
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);
pthread_join(thread, NULL);
pthread_mutex_destroy(&mutex);
pthread_cond_destroy(&cond);
return 0;
}
```
在这个例子中,我们创建了一个子线程,子线程会在条件变量上等待。主线程等待2秒后,通过调用pthread_cond_signal函数来通知子线程条件变量的状态发生了变化。子线程在等待时间到达或者收到信号时会被唤醒,并打印相应的信息。
阅读全文