• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
我是张洪铭我是熊博士
时光静好,与君同;细水长流,与君语
博客园    首页    新随笔    联系   管理    订阅  订阅

随笔分类 -  C++11/14/17

1 2 下一页
C++ 新特性的经验记录和分享
C++ std::Recursive_mutex 支持 “对同一互斥量进行嵌套加锁”

摘要:使用场景:一个类的不同成员函数之间,存在相互调用的情况, 如果这样的成员函数作为线程的入口函数时,就会出现在成员函数 func1()中对某个互斥量上锁,并且, func1()中调用了成员函数 func2() ,实际上 func2()为了保护成员数据,func2()内部也对同一个互斥量上锁。 在我们对 阅读全文
posted @ 2022-01-17 16:38 我是张洪铭我是熊博士 阅读(1708) 评论(0) 推荐(0)
采用C++17新标准 “共享锁”和“独占锁”更低消耗更好性能地保护不常更新的共享数据

摘要:用到的标准库: std::shared_lock<>、 std::shared_mutex、 std::lock_guard<>。 另外还有 std::shared_timed_mutex(此处不讲)。 分析:对于保护不常更新的共享数据, 因为写只是很偶然的发生,更频繁的是读取。如果不区分 “读者” 阅读全文
posted @ 2022-01-17 14:39 我是张洪铭我是熊博士 阅读(544) 评论(0) 推荐(0)
双重检查锁--声名狼藉, 臭名昭著

摘要:双重检查锁模式,是经常听到和用到的方式,既保护了数据的初始化过程,也避免了每次访问时,多个线程要序列化的检查锁问题。 不过,又有观点说,双重检查锁模式是声名狼藉,是臭名昭著的。下面我们通过例子来分析论证。直接贴代码,附上执行结果,我们先看效果,再做分析。 1 xxx.h 2 3 #include < 阅读全文
posted @ 2022-01-16 21:26 我是张洪铭我是熊博士 阅读(394) 评论(0) 推荐(0)
std::get<C++11多线程库~线程间共享数据>(10):使用互斥量保护共享数据(5)

摘要:1 /* 2 * 话题1:使用互斥量保护共享数据 3 * 4 * 接下来学习第五个小话题:避免死锁的进阶指导 5 * 6 * 这一小节的内容,完全引用,只在最后补充上我对这部分的理解,以及更多一点的想法 7 */!!! 非常有意思的是下面讲到的 “使用锁的层次结构”。 锁的层次的意义在于提供对运行时 阅读全文
posted @ 2021-10-30 21:13 我是张洪铭我是熊博士 阅读(147) 评论(0) 推荐(0)
std::get<C++11多线程库~线程间共享数据>(10):使用互斥量保护共享数据(4)

摘要:1 #ifndef DEADLOCK_QUESTIONDESCRIBLE_AND_SOLUTION_H 2 #define DEADLOCK_QUESTIONDESCRIBLE_AND_SOLUTION_H 3 4 /* 5 * 话题1:使用互斥量保护共享数据 6 * 7 * 接下来学习第四个小话题 阅读全文
posted @ 2021-10-29 22:35 我是张洪铭我是熊博士 阅读(49) 评论(0) 推荐(0)
C++多线程库的常用函数 std::lock()

摘要:格式:函数名 + 头文件 + 用例 + 解释说明 1 函数名: 2 std::lock() 3 4 头文件: 5 #include <mutex> 6 7 用例: 8 std::mutex ma, mb, mc; 9 std::lock(ma, mb, mc); 10 std::lock_guard 阅读全文
posted @ 2021-10-28 21:53 我是张洪铭我是熊博士 阅读(1011) 评论(0) 推荐(1)
std::get<C++11多线程库~线程间共享数据>(10):使用互斥量保护共享数据(3)

摘要:1 #ifndef LOCATE_INTERFACES_RACE_CONDITION 2 #define LOCATE_INTERFACES_RACE_CONDITION 3 4 /* 5 * 话题1:使用互斥量保护共享数据 6 * 7 * 接下来学习第三个小话题:定位接口间的条件竞争 8 * 9 阅读全文
posted @ 2021-10-28 20:18 我是张洪铭我是熊博士 阅读(80) 评论(0) 推荐(0)
std::get<C++11多线程库~线程间共享数据>(10):使用互斥量保护共享数据(2)

摘要:1 #ifndef USE_CODE_PROTECTED_DATA_H 2 #define USE_CODE_PROTECTED_DATA_H 3 4 /* 5 * 话题1:使用互斥量保护共享数据 6 * 7 * 接下来学习第二个小话题:用代码来保护共享数据 8 * 9 * 从第一个小话题可以看到, 阅读全文
posted @ 2021-10-28 20:14 我是张洪铭我是熊博士 阅读(48) 评论(0) 推荐(0)
std::get<C++11多线程库~线程间共享数据>(10):使用互斥量保护共享数据(1)

摘要:1 /* 2 * 话题1:使用互斥量保护共享数据 3 * 4 * 1. C++中使用互斥量 5 * 2. 用代码来保护共享数据 6 * 3. 定位接口间的条件竞争 7 * 4. 死锁:问题描述及解决方案 8 * 5. 避免思索的进阶指导 9 * 6. std::unique_lock 灵活的锁 10 阅读全文
posted @ 2021-10-22 12:04 我是张洪铭我是熊博士 阅读(62) 评论(0) 推荐(0)
C++多线程库的常用模板类 std::lock_guard

摘要:格式:类名 + 头文件 + 用例 + 解释说明 1 模板类类名: 2 std::lock_guard 3 4 头文件: 5 #include <mutex> 6 7 用例: 8 9 std::mutex m; 10 std::lock_guard<std::mutex> lk(m); 解释说明: C 阅读全文
posted @ 2021-10-22 11:32 我是张洪铭我是熊博士 阅读(902) 评论(0) 推荐(0)
C++多线程库的常用类 std::mutex

摘要:格式:类名 + 头文件 + 用例 + 解释说明 1 类名: mutex 2 3 头文件: #include <mutex> 4 5 用例; 6 std::mutex m_mutex; 解释说明: std::mutex C++提供的互斥量,用在多线程编程中,来保护共享数据。 C++中通过实例化std: 阅读全文
posted @ 2021-10-22 11:28 我是张洪铭我是熊博士 阅读(483) 评论(0) 推荐(0)
std::get<C++11多线程库~线程间共享数据>(09):共享数据带来的问题(1)

摘要:1 #include <QCoreApplication> 2 3 /* 4 * 话题1:线程间共享数据 5 * a. 共享数据带来的问题 6 * b. 使用互斥量保护数据 7 * c. 数据保护的替代方案 8 * 9 * 多个线程只读的访问某一个相同的数据,不会出现问题; 10 * 多个线程有读有 阅读全文
posted @ 2021-10-08 21:35 我是张洪铭我是熊博士 阅读(84) 评论(0) 推荐(0)
C++多线程库的常用函数 std::this_thread::get_id()

摘要:格式:函数 + 头文件 + 用例 + 解释说明 函数: std::this_thread::get_id() 头文件: <thread> 用例: std::thread::id master_thread = std::this_thread::get_id(); 另一种获取线程标识符 id 的办法 阅读全文
posted @ 2021-10-08 20:19 我是张洪铭我是熊博士 阅读(7707) 评论(0) 推荐(0)
C++多线程库的常用函数积累和整理

摘要:std::this_thread::get_id() 获取线程标识符 std::thread::hardware_concurrenc() 获取硬件能够支持的一个应用程序最对的线程数量 C++多线程库的常用类 std::mutex C++提供的互斥量,用在多线程编程中,来保护共享数据。 C++多线程 阅读全文
posted @ 2021-10-08 20:15 我是张洪铭我是熊博士 阅读(250) 评论(0) 推荐(0)
C++多线程库的常用函数 std::thread::hardware_concurrency()

摘要:格式:函数 + 头文件 + 用例 + 解释说明 1. 函数 std::thread::hardware_concurrency() 头文件 #include <thread> 用例 unsigned long const hardware_threads = std::thread::hardwar 阅读全文
posted @ 2021-10-04 14:29 我是张洪铭我是熊博士 阅读(1743) 评论(0) 推荐(0)
std::get<C++11多线程库~线程管理>(08):转移线程所有权(2)

摘要:1 /* 2 * 话题1:基于“转移线程的所有权”,改进 thread_guard 类, 确保 std::thread 可以被 join或detach。 3 * 类 Scoped_thread 的构造函数把参数传递的 std::thread 拥有的所有权转移到自身成员变量上。 4 * 如果参数传递的 阅读全文
posted @ 2021-10-01 11:32 我是张洪铭我是熊博士 阅读(104) 评论(0) 推荐(0)
std::get<C++11多线程库~线程管理>(08):转移线程所有权(1)

摘要:1 #include <QCoreApplication> 2 #include <thread> 3 #include <iostream> 4 5 /* 6 * 话题1:转移线程的所有权。 7 * std::thread 构造函数需传入一个函数或可调用对象, 每一个 std::thread 都关 阅读全文
posted @ 2021-10-01 10:48 我是张洪铭我是熊博士 阅读(99) 评论(0) 推荐(0)
std::get<C++11多线程库>(07):向线程函数传递参数(5)

摘要:1 //! [3] *引用/指针 语义下变量地址情况回顾* 2 int main(int argc, char *argv[]){ 3 4 int a = 10; //0x4ffe28 5 int &refa = a; //0x4ffe28 6 int *pa = &a; //0x4ffe28 7 阅读全文
posted @ 2021-09-25 18:29 我是张洪铭我是熊博士 阅读(68) 评论(0) 推荐(0)
std::get<C++11多线程库>(07):向线程函数传递参数(4)

摘要:1 /* 2 * 问-思考: 3 * 1. std::thread 构造函数的第一个参数为重载函数时, 如何决定哪一个重载函数才是我们想要调用的? 4 */ 1 //! [0] * 问-思考-1 * 2 //! std::thread 构造函数的第一个参数为重载函数时, 如何决定哪一个重载函数才是我 阅读全文
posted @ 2021-09-25 18:27 我是张洪铭我是熊博士 阅读(105) 评论(0) 推荐(0)
std::get<C++11多线程库>(07):向线程函数传递参数(2)

摘要:1 /* 实例场景: 2 * 1. std::thread 构造函数的第一个参数为全局函数时,参数的传递。 3 * 传递方式:std::thread第一个参数为全局函数的函数指针, std::thread 从第二个开始的参数,依次传递给全局函数的参数表 4 * std::thread t(func, 阅读全文
posted @ 2021-09-25 18:20 我是张洪铭我是熊博士 阅读(96) 评论(0) 推荐(0)

1 2 下一页
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3