c++中使用互斥锁mutex和条件变量实现同步
创始人
2024-11-11 08:04:53
0

在C++中,条件变量(std::condition_variable)本身并不支持直接的超时功能。通常情况下,我们会结合 std::chrono 中的时间点或持续时间来实现等待超时的效果。下面是一个示例,演示如何使用条件变量等待一段时间,并在超时时继续执行其他逻辑:

#include
#include
#include
#include
#include

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

void worker_thread() {
    // 模拟耗时的任务
    std::this_thread::sleep_for(std::chrono::seconds(2));
    
    // 获取互斥锁
    std::unique_lock lck(mtx);
    // 修改共享条件
    data_ready = true;
    std::cout << "Worker thread signals data ready\n";
    // 通知条件变量
    cv.notify_one();
}

int main() {
    // 创建工作线程
    std::thread worker(worker_thread);
    
    // 等待数据准备好,但最多等待1秒钟
    {
        std::unique_lock lck(mtx);
        if (cv.wait_for(lck, std::chrono::seconds(1), []{ return data_ready; })) {
            std::cout << "Main thread detects data ready\n";
        } else {
            std::cout << "Timeout: Main thread continues without data\n";
        }
    }
    
    // 等待工作线程结束
    worker.join();
    
    return 0;
}

解释

  1. cv.wait_for(lck, duration, pred):这是 std::condition_variable 的成员函数,允许线程等待一段时间或者直到满足特定条件。它的第二个参数是一个 std::chrono::duration 类型的对象,表示等待的时间段。在示例中,我们使用 std::chrono::seconds(1) 表示等待1秒钟。

  2. 超时处理:如果等待超时(即工作线程在1秒内没有通知条件变量),cv.wait_for 将返回 false,此时 main 线程可以根据需要继续执行其他逻辑,例如打印超时消息。

  3. 工作线程通知:在 worker_thread 中,通过设置 data_ready = true; 和调用 cv.notify_one(); 来通知 main 线程数据已准备好。

相关内容

热门资讯

五分钟开挂!聚友联盟免费辅助器... 五分钟开挂!聚友联盟免费辅助器下载地址,闲逸辅助神器免费,技巧教程-2026最新版本小薇(透视辅助)...
8分钟教程!广西老友玩辅助,福... 8分钟教程!广西老友玩辅助,福建天天开心辅助器是真的吗,都是有挂(有挂规律)-哔哩哔哩一、福建天天开...
第5分钟详细!宝宝浙江辅助(辅... 第5分钟详细!宝宝浙江辅助(辅助挂)确实真的是有挂,详细教程(有挂分析)-哔哩哔哩1、宝宝浙江辅助系...
八分钟开挂!中至余干辅助器20... 八分钟开挂!中至余干辅助器2024,胡乐辅助脚本可靠吗,必胜教程-2026最新版本1、胡乐辅助脚本可...
一分钟app!新天道辅助脚本,... 一分钟app!新天道辅助脚本,蜀山四川怎么提高胜率,总是真的有挂(有挂解惑)-哔哩哔哩1、蜀山四川怎...
第6分钟揭幕!火神大厅辅助(辅... 第6分钟揭幕!火神大厅辅助(辅助挂)本来真的是有挂,曝光教程(确实有挂)-哔哩哔哩1、火神大厅辅助透...
7分钟开挂!潮汕来物局开挂方法... 您好,潮汕来物局开挂方法这款游戏可以开挂的,确实是有挂的,需要了解加去威信【136704302】很多...
第5分钟方法!杭州都莱可以装挂... 第5分钟方法!杭州都莱可以装挂吗,约局吧可以看到别人底牌,都是真的有挂(发现有挂)-哔哩哔哩一、约局...
第6分钟关于!悠闲川南辅助辅助... 第6分钟关于!悠闲川南辅助辅助脚本(辅助挂)总是有挂,教你攻略(真实有挂)-哔哩哔哩1、悠闲川南辅助...
第7分钟开挂!吉祥填大坑游戏攻... 第7分钟开挂!吉祥填大坑游戏攻略,指尖四川辅助脚本苹果版,存在挂教程-2026最新版本1、指尖四川辅...