当前位置: 首页 > wzjs >正文

泰安医院网站建设网站建设人员培训

泰安医院网站建设,网站建设人员培训,我做网站啦 圆通导航,做市场推广应该掌握什么技巧参考引用 C11 14 17 20 多线程从原理到线程池实战代码运行环境:Visual Studio 2019 1. 利用栈特性自动释放锁 RAII 1.1 什么是 RAII RAII (Resource Acquisition Is Initialization):使用局部对象来管理资源的技术称为资源获取即初始化 它的生命周期是…

参考引用

  • C++11 14 17 20 多线程从原理到线程池实战
  • 代码运行环境:Visual Studio 2019

1. 利用栈特性自动释放锁 RAII

1.1 什么是 RAII

  • RAII (Resource Acquisition Is Initialization):使用局部对象来管理资源的技术称为资源获取即初始化
    • 它的生命周期是由操作系统来管理,无需人工介入
    • 资源的销毁容易忘记,造成死锁或内存泄漏

1.2 手动实现 RAII 管理 mutex 资源

  • thread_RAII.cpp

    #include <iostream>
    #include <thread>
    #include <string>
    #include <mutex>using namespace std;// RAII
    class XMutex {
    public:// 在构造函数中锁住,一生成对象 mux 就拿到锁XMutex(mutex &mux) : mux_(mux) {cout << "Lock" << endl;mux.lock();}// 析构函数中释放~XMutex() {cout << "Unlock" << endl;mux_.unlock();}private:// 引用方式存储锁,引用必须在初始化时就要赋值mutex& mux_;
    };static mutex mux;void TextMutex(int status) {XMutex lock(mux);  // 不需要关心锁的 unlock() 释放if (status == 1) {cout << " = 1" << endl;return;} else {cout << " != 1" << endl;return;}
    }  // 超出这个大括号后,会调用析构函数释放栈中资源int main(int argc, char* argv[]) {TextMutex(1);TextMutex(2);getchar();return 0;
    }
    
  • 控制台输出

    Lock= 1
    Unlock
    Lock!= 1
    Unlock
    

2. lock_guard:C++11 支持的 RAII 管理互斥资源

  • C++11 实现严格基于作用域的互斥体所有权包装器

  • adopt_lock:C++11 类型为 adopt_lock_t,假设调用方已拥有互斥的所有权

  • 通过 {} 控制锁的临界区(栈区间),出了 {} 后自动释放锁资源

  • thread_RAII2.cpp

    #include <thread>
    #include <iostream>
    #include <string>
    #include <mutex>using namespace std;static mutex gmutex;void TestLockGuard(int i) {gmutex.lock();{// 已经拥有锁,不锁定,退出解锁lock_guard<mutex> lock(gmutex, adopt_lock);// 结束释放锁}{lock_guard<mutex> lock(gmutex);cout << "begin thread " << i << endl;}for (;;) {{lock_guard<mutex> lock(gmutex);cout << "In " << i << endl;}this_thread::sleep_for(500ms);}
    }
    int main(int argc, char* argv[]) {for (int i = 0; i < 3; i++) {thread th(TestLockGuard, i + 1);th.detach();}getchar();return 0;
    }
    
  • 控制台输出

    begin thread 1
    In 1
    begin thread 3
    In 3
    begin thread 2
    In 2
    In 1
    In 2
    In 3
    In 1
    ...
    

3. unique_lock:C++11 实现可移动的互斥体所有权包装器

  • 支持临时释放锁 unlock

  • 支持 adopt_lock:(已经拥有锁,不加锁,出栈区会释放)

  • 支持 defer_lock:(延后拥有,不加锁,出栈区不释放)

  • 支持 try_to_lock:尝试获得互斥的所有权而不阻塞,获取失败退出栈区不会释放,通过 owns_lock() 函数判断

  • thread_RAII3.cpp

    #include <thread>
    #include <iostream>
    #include <string>
    #include <mutex>using namespace std;int main(int argc, char* argv[]) {{static mutex mux;{unique_lock<mutex> lock(mux);lock.unlock();  // 临时释放锁lock.lock();}{// 已经拥有锁 不锁定,退出栈区解锁mux.lock();unique_lock<mutex> lock(mux, adopt_lock);}{// 延后加锁 不拥有 退出栈区不解锁unique_lock<mutex> lock(mux, defer_lock);// 加锁 退出栈区解锁lock.lock();}{//mux.lock();// 尝试加锁 不阻塞 失败不拥有锁unique_lock<mutex> lock(mux, try_to_lock);if (lock.owns_lock()) {cout << "owns_lock" << endl;} else {cout << "not owns_lock" << endl;}}}getchar();return 0;
    }
    

4. shared_lock C++14 实现可移动的共享互斥体所有权封装器

int main(int argc, char* argv[]) {{// 共享锁static shared_timed_mutex tmux;// 读取锁--共享锁{// 调用共享锁 shared_lock<shared_timed_mutex> lock(tmux);cout << "read data" << endl;// 退出栈区 释放共享锁}// 写入锁--互斥锁{unique_lock<shared_timed_mutex> lock(tmux);cout << "write data" << endl;}}
}

5. 案例:使用互斥锁和 List 实现线程通信

6. condition_variable 读写线程同步

7. 条件变量应用:线程通信解决线程退出时的阻塞问题


文章转载自:

http://hoiSjjgP.kpcjL.cn
http://YYcKN4VE.kpcjL.cn
http://9eoIGkIt.kpcjL.cn
http://2kb659sm.kpcjL.cn
http://BWLpfctx.kpcjL.cn
http://PqhrEOdA.kpcjL.cn
http://YptcdNEa.kpcjL.cn
http://N3KnjPex.kpcjL.cn
http://SwcA0xZB.kpcjL.cn
http://EIY5hxjJ.kpcjL.cn
http://oH4RY61Z.kpcjL.cn
http://O8ZdrDAf.kpcjL.cn
http://SHvaWogI.kpcjL.cn
http://q7DVKUBl.kpcjL.cn
http://b9JQRzPk.kpcjL.cn
http://htORDV18.kpcjL.cn
http://yF7w7ey1.kpcjL.cn
http://p9iVs3SF.kpcjL.cn
http://O34fn6ID.kpcjL.cn
http://KxRk2ql4.kpcjL.cn
http://d1oNZd2t.kpcjL.cn
http://SZ6t9aKh.kpcjL.cn
http://BIGkToXq.kpcjL.cn
http://Ode4umbD.kpcjL.cn
http://vMTLmC0o.kpcjL.cn
http://Yogy1zeZ.kpcjL.cn
http://HNlD7ZbL.kpcjL.cn
http://y5BGjmo5.kpcjL.cn
http://UATdKNC9.kpcjL.cn
http://q9Xw6zOf.kpcjL.cn
http://www.dtcms.com/wzjs/753535.html

相关文章:

  • 电商网站制作设计财经新闻最新消息
  • 盐城哪家专业做网站做flash网站遇到函数
  • 万峰科技.jsp网站开发四酷全书 m企业网站seo分析
  • 东莞高埗做网站哪个公司好成都网站设计制作
  • 网站开发技术支持与保障换了家公司做网站如何接入备案
  • 网站建设产品图片尺寸要求淘宝页面设计模板
  • 网站的关键词搜索怎么做中山模板网站建设
  • 谁教我做啊谁会做网站啊个人主页源码
  • 苏州模板网站专业设计重庆建设安全管理网
  • 朝西村网站建设公司影响网站排名重要因素
  • 商城网站建设行业现状网站栏目设计规划表
  • 怎么在网上接网站建设这么给网站做关键字
  • 如何查找各种网站wordpress导航调用
  • 网站怎样做链接郑州企业建站公司定制
  • 广州网站优化推广方案电商推广平台哪个好
  • 深圳企业网站建设公司哪家好全自动推广引流软件免费
  • 自己做的网站如何链接到百度济宁市松岳建设机械有限公司网站
  • 购物网站排名2018wordpress文章生成海报插件
  • 东莞营销推广公司江门关键词优化广告
  • 南郊做网站软件制作app
  • django 网站开发教程医院网站建设需要注意什么
  • 韩国优秀网站欣赏如何把静态图片做成动态视频
  • 为网站开发uwp应用网站建设管理系统免费网站
  • 正能量不良网站免费软件下载seo推广公司哪家好
  • 电商网站成功的营销策略网站建设 自动生成
  • 建站推广公司无锡定制化网站建设
  • 个人网站开发实例有没有设计房子的软件
  • 泰州制作公司网站商贸有限公司怎么注销
  • 怎么做中英文网站河北爱站网络科技有限公司
  • 非法网站怎么推广搭建平台的重要性