C++中的条件变量(condition variable)是一种同步原语,用于在多线程环境中实现线程间的等待和通知机制
示例:
// 使用多个锁和条件语句
std::mutex mtx1, mtx2;
std::condition_variable cv1, cv2;
bool ready = false;
// 线程1
{
std::unique_lock<std::mutex> lock1(mtx1);
cv1.wait(lock1, [] { return ready; });
// 处理数据
}
// 线程2
{
std::unique_lock<std::mutex> lock2(mtx2);
ready = true;
cv2.notify_one();
}
使用条件变量后:
std::mutex mtx;
std::condition_variable cv;
bool ready = false;
// 线程1
{
std::unique_lock<std::mutex> lock(mtx);
cv.wait(lock, [] { return ready; });
// 处理数据
}
// 线程2
{
std::unique_lock<std::mutex> lock(mtx);
ready = true;
cv.notify_one();
}
std::future
和std::promise
进行线程间通信:std::future
和std::promise
提供了一种更简洁的方法来实现线程间的同步和数据传递。通过使用这些工具,可以避免显式地使用锁和条件变量。示例:
// 使用std::future和std::promise
std::promise<void> prom;
std::future<void> fut = prom.get_future();
std::thread t([&] {
// 等待数据
fut.wait();
// 处理数据
});
// 设置数据
prom.set_value();
t.join();
总之,条件变量可以帮助您简化多线程代码,使其更易于理解和维护。在实际编程中,应根据具体场景选择合适的同步原语,如条件变量、互斥锁、std::future
和std::promise
等。