it编程 > 编程语言 > C/C++

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

23人参与 2025-07-10 C/C++

作用: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 条件变量内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

您想发表意见!!点此发布评论

推荐阅读

C++中堆内存和栈内存区别小结

07-11

在宝塔面板中安装OpenJDK-17的3种方法步骤

07-11

C++中strcpy和memcpy的区别小结

07-11

C++内存序memory_order的具体操作

07-11

C++ 运算符重载的使用

07-11

浅谈C++中什么时候需要手动清理内存

07-08

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论