c++ 条件变量的用法举例
时间: 2023-05-23 14:05:29 浏览: 194
C++ 例子
A:条件变量是多线程编程中的一种同步机制,主要用于线程之间的通信。下面是一个简单的例子:
```c
#include <stdio.h>
#include <pthread.h>
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
int count = 0;
void* thread_function(void* arg)
{
pthread_mutex_lock(&mutex);
while (count < 10)
{
pthread_cond_wait(&cond, &mutex);
}
printf("Thread woke up, count is now %d\n", count);
pthread_mutex_unlock(&mutex);
return NULL;
}
int main()
{
pthread_t my_thread;
int i;
pthread_create(&my_thread, NULL, thread_function, NULL);
for (i = 0; i < 10; i++)
{
pthread_mutex_lock(&mutex);
count++;
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);
printf("Main thread incremented count to %d\n", count);
}
pthread_join(my_thread, NULL);
return 0;
}
```
这个例子中,有两个线程:一个主线程和一个子线程。子线程在条件变量上等待,只有当 count 的值达到 10 时才会被唤醒。主线程按顺序递增 count 的值,并且每次递增后通过条件变量通知子线程。
需要注意的是,单纯的 pthread_cond_signal 不能保证唤醒等待中的线程,需要配合 pthread_cond_wait 使用。此外,条件变量的使用需要搭配互斥锁,以避免竞争条件。
阅读全文