pthread_cond_timedwait写出代码示例
时间: 2025-01-04 11:39:28 浏览: 9
`pthread_cond_timedwait()`是一个用于线程间通信的函数,它允许线程在一个条件变量上等待直到某个特定条件被满足或者超时。下面是一个简单的例子,展示如何在Linux中使用这个函数实现定时任务:
```c
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <time.h>
#define MAX_THREADS 5
#define TIMER_DELAY 3
typedef struct {
int shared_value;
pthread_cond_t cond; // 条件变量
pthread_mutex_t mutex; // 互斥锁
} SharedData;
void *thread_func(void *arg) {
SharedData *data = (SharedData *) arg;
pthread_mutex_lock(&data->mutex);
// 假设我们有一个循环,每秒钟检查一次共享值
for (int i = 0; ; i++) {
time_t start_time = time(NULL);
while ((time(NULL) - start_time) < TIMER_DELAY && data->shared_value != 1) {
pthread_cond_wait(&data->cond, &data->mutex); // 等待条件满足
}
if (data->shared_value == 1) {
printf("Thread %d woke up after %ld seconds.\n", pthread_self(), TIMER_DELAY);
break;
}
}
pthread_mutex_unlock(&data->mutex);
return NULL;
}
int main() {
SharedData shared_data = {0, PTHREAD_COND_INITIALIZER, PTHREAD_MUTEX_INITIALIZER};
pthread_t threads[MAX_THREADS];
// 初始化共享值为0
shared_data.shared_value = 0;
// 创建线程并启动
for (int i = 0; i < MAX_THREADS; ++i) {
pthread_create(&threads[i], NULL, thread_func, &shared_data);
}
// 等待所有线程完成
for (int i = 0; i < MAX_THREADS; ++i) {
pthread_join(threads[i], NULL);
}
return 0;
}
```
在这个例子中,主线程设置了`shared_data.shared_value`为0,并创建了几个线程,在一个循环中等待`TIMER_DELAY`秒后检查共享值。当`shared_data.shared_value`变更为1时,线程就会通过`pthread_cond_wait()`醒来。注意,每个线程都持有`shared_data.mutex`,所以在等待期间不会被其他线程修改共享数据。
阅读全文