C 语言

关注公众号 jb51net

关闭
首页 > 软件编程 > C 语言 > C++ std::condition_variable 条件变量

C++中std::condition_variable 条件变量的使用

作者:Ring__Rain

std::condition_variable是C++多线程编程中用于线程间同步的核心工具,适用于需要协调多个线程行为、避免资源浪费的场景,下面就来介绍一下std::condition_variable 条件变量的使用,

作用:std::condition_variable 是 C++ 多线程编程中用于线程间同步的核心工具,其使用场景和核心价值体现在以下几个方面:        

一、何时使用 std::condition_variable?

​二、为什么使用 std::condition_variable?

​三、使用示例与核心步骤

​基本流程

定义共享变量和同步工具

std::mutex mtx;
std::condition_variable cv;
bool data_ready = false;

等待线程

std::unique_lock<std::mutex> lock(mtx);
cv.wait(lock, [] { return data_ready; });  // 阻塞直到 data_ready 为 true

通知线程

{
    std::lock_guard<std::mutex> lock(mtx);
    data_ready = true;
}
cv.notify_one();  // 唤醒一个等待线程

​经典案例:生产者-消费者模型

#include <queue>
#include <mutex>
#include <condition_variable>

std::mutex mtx;
std::condition_variable cv;
std::queue<int> task_queue;

void producer() {
    for (int i = 0; i < 10; ++i) {
        {
            std::lock_guard<std::mutex> lock(mtx);
            task_queue.push(i);
        }
        cv.notify_one();  // 通知消费者
    }
}

void consumer() {
    while (true) {
        std::unique_lock<std::mutex> lock(mtx);
        cv.wait(lock, [] { return !task_queue.empty(); });  // 等待队列非空
        int task = task_queue.front();
        task_queue.pop();
        lock.unlock();
        // 处理任务
    }
}

​四、注意事项

​总结

std::condition_variable 的核心价值在于通过 ​等待-通知机制 实现高效的线程同步,适用于需要协调多个线程行为、避免资源浪费的场景。其设计解决了传统轮询的低效问题,并通过与互斥锁的配合优化了多线程程序的性能与安全性。

到此这篇关于C++中std::condition_variable 条件变量的使用的文章就介绍到这了,更多相关C++ std::condition_variable 条件变量内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文