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(mtx); // 使用unique_lock获取互斥锁

(ul, [] { return isReady; }); // 等待条件满足

// 条件满足后执行其他操作

}

void notifyingThread()

{

std::this_thread::sleep_for(std::chrono::seconds(2)); // 模拟耗时操作

{

std::lock_guard lg(mtx); // 使用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++中条件变量和互斥锁的基本介绍和用法,希望对你有帮助。