2024年6月9日发(作者:)
C++中的条件变量和互斥锁是多线程编程中常用的同步机制,用于实现线程之间的互
斥和通信。
互斥锁(Mutex)是一种保护共享资源的机制。在访问共享资源之前,线程需要先获取
互斥锁,如果互斥锁已经被其他线程获取,则当前线程会被阻塞,直到互斥锁被释放。
C++提供了std::mutex类来实现互斥锁的功能。使用互斥锁的一般流程如下:
```cpp
#include
#include
#include
std::mutex mtx; // 创建互斥锁
void threadFunction()
{
(); // 获取互斥锁
// 访问共享资源
(); // 释放互斥锁
}
int main()
{
std::thread t(threadFunction);
();
return 0;
}
```
条件变量(Condition Variable)用于线程之间的通信。当一个线程等待某个条件满足时,
可以使用条件变量进行等待,直到其他线程通知条件满足为止。C++提供了
std::condition_variable类来实现条件变量的功能。使用条件变量的一般流程如下:
```cpp
#include
#include
#include
#include
std::mutex mtx; // 创建互斥锁
std::condition_variable cv; // 创建条件变量
bool isReady = false; // 共享的条件
void waitingThread()
{
std::unique_lock
(ul, [] { return isReady; }); // 等待条件满足
// 条件满足后执行其他操作
}
void notifyingThread()
{
std::this_thread::sleep_for(std::chrono::seconds(2)); // 模拟耗时操作
{
std::lock_guard
isReady = true; // 设置条件为满足
}
_one(); // 通知等待的线程条件满足
}
int main()
{
std::thread t1(waitingThread);
std::thread t2(notifyingThread);
();
();
return 0;
}
```
在上述示例中,等待线程通过调用`()`等待条件满足,而通知线程通过设置
`isReady`为`true`并调用`_one()`来通知等待线程条件已经满足。
需要注意的是,互斥锁和条件变量通常配合使用。等待线程在等待之前需要先获取互
斥锁,以确保等待和条件判断的原子性。因此,在等待线程中使用`std::unique_lock`获
取互斥锁,而在通知线程中使用`std::lock_guard`获取互斥锁。
以上是C++中条件变量和互斥锁的基本介绍和用法,希望对你有帮助。
发布评论