| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> thread -> 正文阅读 |
|
[C++知识库]thread |
目录 线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取 完,其他线程才可使用。不会出现数据不一致或者数据污染。” 创建线程std::thread 创建线程 (线程不安全)
?连续执行两次结果分别是:current cnt = -852 和 current cnt = 27,即这段代码是线程不安全的。 互斥量(mutex) 原子变量(atomic)
通过mutex加互斥锁 ,但使用mtx.lock()上锁后,若在mtx.unlock()解锁之前出现return 等结束该函数,意味着程序无法执行到解锁,那么就导致死锁。 条件变量(condition_variable), 信号量(semaohore) promise future std::packged_task std::async 生产者消费者模型 线程池的实例 thread_localthread_local变量是C++ 11新引入的一种存储类型。它会影响变量的存储周期(Storage duration),C++中有4种存储周期:
有且只有thread_local关键字修饰的变量具有线程周期(thread duration),这些变量(或者说对象)在线程开始的时候被生成(allocated),在线程结束的时候被销毁(deallocated)。并且每 一个线程都拥有一个独立的变量实例(Each thread has its own instance of the object)。 那么,哪些变量可以被声明为thread_local?以下3类都是ok的
下面引用《C++ Concurrency in Action》书中的例子来说明这3种情况:
既然每个线程都拥有一份独立的thread_local变量,那么就有2个问题需要考虑:
下面的代码可以帮助回答这2个问题。
结果: f() id=1, thread_local n=3, static g_nn=3 可见,thread_local是规定每次新建线程时,重新初始化该变量,它的声明周期贯穿一个线程的创建和结束。而static 则始终进行一次变量初始化,对所有的线程保持变量共享。 |
|
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/23 19:22:11- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |