摘要:
1 /************************************************* 2 Copyright: zhm_xxbs@2022 3 Author: 张洪铭 4 Date: 2022年08月07日 5 Description:主要围绕QVariant类型,编写代码深入认 阅读全文
摘要:
直接上代码:简单的很 1 ///////////////////////////////////////////////////////////////////// 2 /// file: ProcessCommunicate.h 3 /// Description:本文采用<QSharedMemo 阅读全文
摘要:
使用场景:一个类的不同成员函数之间,存在相互调用的情况, 如果这样的成员函数作为线程的入口函数时,就会出现在成员函数 func1()中对某个互斥量上锁,并且, func1()中调用了成员函数 func2() ,实际上 func2()为了保护成员数据,func2()内部也对同一个互斥量上锁。 在我们对 阅读全文
摘要:
用到的标准库: std::shared_lock<>、 std::shared_mutex、 std::lock_guard<>。 另外还有 std::shared_timed_mutex(此处不讲)。 分析:对于保护不常更新的共享数据, 因为写只是很偶然的发生,更频繁的是读取。如果不区分 “读者” 阅读全文
摘要:
C++标准委员会也认为条件竞争的处理很重要。所以,C++标准库提供了 std::once_flag结构体 和 std::call_once() 函数,来处理条件竞争(这种情况的条件竞争:臭名昭著的双重检查锁模式)。 比起锁住互斥量并显示的检查指针,只需要使用 std::call_once() 就可以 阅读全文
摘要:
双重检查锁模式,是经常听到和用到的方式,既保护了数据的初始化过程,也避免了每次访问时,多个线程要序列化的检查锁问题。 不过,又有观点说,双重检查锁模式是声名狼藉,是臭名昭著的。下面我们通过例子来分析论证。直接贴代码,附上执行结果,我们先看效果,再做分析。 1 xxx.h 2 3 #include < 阅读全文
摘要:
1 /* 2 * 话题1:使用互斥量保护共享数据 3 * 4 * 接下来学习第五个小话题:避免死锁的进阶指导 5 * 6 * 这一小节的内容,完全引用,只在最后补充上我对这部分的理解,以及更多一点的想法 7 */!!! 非常有意思的是下面讲到的 “使用锁的层次结构”。 锁的层次的意义在于提供对运行时 阅读全文
摘要:
1 #ifndef DEADLOCK_QUESTIONDESCRIBLE_AND_SOLUTION_H 2 #define DEADLOCK_QUESTIONDESCRIBLE_AND_SOLUTION_H 3 4 /* 5 * 话题1:使用互斥量保护共享数据 6 * 7 * 接下来学习第四个小话题 阅读全文
摘要:
格式:函数名 + 头文件 + 用例 + 解释说明 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 阅读全文