基于POSIX 线程库,用C++封装一个条件变量类
时间: 2024-03-05 16:54:55 浏览: 70
好的,以下是一个基于 POSIX 线程库的条件变量类的封装示例:
```c++
#include <pthread.h>
class ConditionVariable {
public:
ConditionVariable() : m_cond(), m_mutex() {
pthread_mutex_init(&m_mutex, NULL);
pthread_cond_init(&m_cond, NULL);
}
~ConditionVariable() {
pthread_mutex_destroy(&m_mutex);
pthread_cond_destroy(&m_cond);
}
void wait() {
pthread_mutex_lock(&m_mutex);
pthread_cond_wait(&m_cond, &m_mutex);
pthread_mutex_unlock(&m_mutex);
}
void notify() {
pthread_mutex_lock(&m_mutex);
pthread_cond_signal(&m_cond);
pthread_mutex_unlock(&m_mutex);
}
void notify_all() {
pthread_mutex_lock(&m_mutex);
pthread_cond_broadcast(&m_cond);
pthread_mutex_unlock(&m_mutex);
}
private:
pthread_cond_t m_cond;
pthread_mutex_t m_mutex;
};
```
在上面的示例中,我们使用 `pthread_cond_t` 和 `pthread_mutex_t` 来实现条件变量和互斥量。`wait()` 方法会阻塞当前线程直到收到一个通知,`notify()` 方法会发送一个通知唤醒一个等待的线程,`notify_all()` 方法会唤醒所有等待的线程。注意,在调用 wait() 方法之前,必须先获得互斥锁,否则会出现死锁的情况。在构造函数中初始化条件变量和互斥量,在析构函数中释放它们。
阅读全文