| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> c++线程二 -> 正文阅读 |
|
[C++知识库]c++线程二 |
接上篇! 其实用mutex的lock()、unlock(), 当然更好用lock_guard(),这些基本能满足我们的应用需求,且容易理解。 一、unique_lock 相比lock_gaurd有一些更灵活的用法主要体现在unique_lock的参数和成员函数上。如下一目了然,不再举例子。
其次,我们常用的用法是unique_lock的控制粒度很细。 unique_lock在析构时会自动判断是否需要解锁:
二、以上的lock_guard、unique_lock用法都是基于mutex,除此之外还有std::recursive_mutex和std::timed_mutex1、recursive_mutex:递归互斥锁,相对于mutex的互斥锁
这种情况,只能用recursive_lock,能递归加锁,用于这种在同一线程嵌套调用加锁的情况。 即同一线程内lock或try_to_lock成功后开始占有锁,并可以多次lock,直到匹配到同样多的unlock后释放锁。早占有期间,其他线程lock会阻塞! 当然同mutex一样,最好是配合lock_guard和unique_lock使用。 2、std::timed_mutex 在一定时期内尝试获取锁,获取到锁就返回。 1、try_lock_for类似与unique_lock<mutx> uLock(mu, std::try_to_lock);
2、try_lock_until() tMutex.try_lock_until(chrono::steady_clock::now()+10s) 3、当然同mutex,超时锁也有递归版本 :recursive_timed_mutex 二、条件变量condition_variable互斥锁是用来防止竞争问题,条件变量是解决“线程同步”问题。一个线程处理完后,通知另外的线程处理。 1、wait()、? notify_one()、notify_all() 对wait()的使用,详见代码的注释,因为只要通知一个线程,所以用notify_one()通知。
notify_one()只会唤醒一个wait的线程,此线程尝试去拿锁,拿不到则一直尝试拿; nofity_all()唤醒所有wait的线程,所有线程都会去拿锁,但只有一个拿到,所以会“惊群”,其他拿不到锁的都会一直尝试拿锁! 另外,如果发送notify时,其他线程没在wait上阻塞,则此次notify不会产生任何作用(notify信号不会被储存,而是直接消失)。 三、原子操作因为这种互斥的情况,c++标准增加原子操作,std::atomic<>类模板,但只能是针对内置普通变量,所以一般只用在计数上。
|
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 2:09:09- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |