zoukankan      html  css  js  c++  java
  • C++并发-同步并发

    1.等待事件

    std::mutex m;
    void wait()
    {
        std::unique_lock<std::mutex> lk(m);
        lk.unlock();
        std::this_thread::sleep_for(std::chrono::millisenconds(100));//休眠100毫秒
        lk.lock();
    }
    

    2.条件变量等待条件

    #include <queue>
    #include <thread>
    #include <mutex>
    #include <condition_variable>
    
    std::mutex mut;
    std::queue<data_chunk> data_queue;
    std::condition_variable data_cond;
    
    void data_prepa()
    {
        data_chunk data; //准备数据
        std::lock_guard<std::mutex> lk(mut);
        data_queue.push(data);//将数据压入队列
        data_cond.notify_one();//通知等待中的线程
    }
    
    void data_process()
    {
        std::unique_lock<std::mutex> lk(mut);  //这个地方必须用这个,不能用lock_guard,因为wait后,互斥元就会一直锁定
        data_cond.wait( lk,[] {return !data_queue.empty();} ); //如果条件满足返回true,否则进行阻塞,并自动解锁互斥元
        data_chunk data=data_queue.front();
        data_queue.pop();  //出栈
        lk.unlock();
    }
    
  • 相关阅读:
    第二次结对作业
    第一次结对作业
    第二次个人编程
    第一次编程作业
    第一篇随笔
    个人总结
    第三次个人作业
    第二次结对作业
    第一次结对作业
    第二次编程
  • 原文地址:https://www.cnblogs.com/penuel/p/11574492.html
Copyright © 2011-2022 走看看