Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / vue / mysql / linux / python / javascript / html / css / c++ / c#

c++ 条件变量

作者:浪推晚风   发布日期:2025-12-03   浏览:59

#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>

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

void print_id(int id) {
    std::unique_lock<std::mutex> lck(mtx);
    // 等待条件变量,直到 ready 变为 true
    cv.wait(lck, []{return ready;});
    // 打印线程 ID
    std::cout << "thread " << id << '\n';
}

void go() {
    std::this_thread::sleep_for(std::chrono::seconds(1)); // 模拟一些准备工作
    std::lock_guard<std::mutex> lck(mtx);
    ready = true;
    cv.notify_all(); // 通知所有等待的线程
}

int main() {
    std::thread threads[10];
    // 启动多个线程
    for (int i = 0; i < 10; ++i)
        threads[i] = std::thread(print_id, i);

    // 启动一个线程来设置 ready 标志
    std::thread(go).detach();

    // 等待所有线程完成
    for (auto& th : threads) th.join();

    return 0;
}

解释说明:

  1. 条件变量std::condition_variable 用于线程间的同步,允许一个或多个线程等待某个特定条件的发生。
  2. 互斥锁std::mutex 用于保护共享资源,确保同一时间只有一个线程可以访问该资源。
  3. 等待和通知:线程通过 cv.wait() 进入等待状态,直到另一个线程调用 cv.notify_all()cv.notify_one() 来唤醒它们。
  4. lambda 表达式cv.wait(lck, []{return ready;}) 中的 lambda 表达式用于检查条件是否满足,只有当条件为真时才会继续执行。
  5. 线程管理:使用 std::thread 创建并管理多个线程,join() 用于等待线程结束。

上一篇:c++printf保留两位小数

下一篇:c++ mqtt

大家都在看

c++闭包

c++单引号和双引号的区别

c++ 注释

c++如何判断素数

c++格式化字符串

c++ orm框架

c++ random函数用法

队列c++

c++freopen怎么用

进制转换c++代码

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站