C++ 线程锁中的条件变量用法
时间: 2023-09-10 10:08:01 浏览: 49
在C++中,条件变量(Condition Variable)是与互斥锁(Mutex)结合使用的一种同步机制,用于线程之间的通信和协调。
条件变量用于在某个条件满足时唤醒等待的线程,从而实现线程间的同步。下面是条件变量的基本用法:
1. 创建互斥锁和条件变量:
```cpp
std::mutex mutex;
std::condition_variable condVar;
```
2. 等待条件满足的线程:
```cpp
std::unique_lock<std::mutex> lock(mutex);
condVar.wait(lock, []{ return condition; });
```
- `std::unique_lock<std::mutex>` 用于获取互斥锁,并在离开作用域时自动释放。
- `condVar.wait()` 会将当前线程置于阻塞状态,直到条件满足。
- `[] { return condition; }` 是一个lambda表达式,用于指定等待的条件,当条件为true时,线程会被唤醒。
3. 唤醒等待的线程:
```cpp
std::unique_lock<std::mutex> lock(mutex);
condition = true; // 设置条件为true
condVar.notify_all(); // 唤醒所有等待的线程
```
- `std::unique_lock<std::mutex>` 用于获取互斥锁,并在离开作用域时自动释放。
- `condition = true;` 设置条件为true,满足等待条件的条件变量。
- `condVar.notify_all();` 唤醒所有等待的线程。
这是最基本的条件变量用法,可以根据具体的需求进行扩展和修改。在实际应用中,通常会结合互斥锁和条件变量来实现更复杂的线程同步和通信机制,以保证线程之间的安全和正确性。