摘要: 序言 互斥锁保证了线程间的同步,但是却将并行操作变成了串行操作,这对性能有很大的影响,所以我们要尽可能的减小锁定的区域,也就是使用细粒度锁。 这一点lock_guard做的不好,不够灵活,lock_guard只能保证在析构的时候执行解锁操作,lock_guard本身并没有提供加锁和解锁的接口,但是有 阅读全文
posted @ 2019-02-28 15:19 卖雨伞的小男孩 阅读(500) 评论(0) 推荐(0) 编辑
摘要: 一、死锁的产生 死锁的原因有两个 a、mutex的lock正确执行了,但是使用资源的时候发生了异常,导致unlock虽然调用了,但是没有执行,也就没有解锁 b、多把锁 两个mutex的时候,mutex1,mutex2 如果两把锁两个线程的顺序不一致,会造成相互等待释放资源,造成死锁 二、死锁的避免 阅读全文
posted @ 2019-02-28 14:33 卖雨伞的小男孩 阅读(970) 评论(0) 推荐(0) 编辑
摘要: 一、数据竞争的产生 在下面例子中: void function_1() { for (int i = 0; i < 100; i++) { std::cout << "from function 1:" << i << std::endl; } } int main() { std::thread 阅读全文
posted @ 2019-02-28 11:56 卖雨伞的小男孩 阅读(518) 评论(0) 推荐(0) 编辑
摘要: 1、简单的例子 #include "stdafx.h" #include <iostream> #include <thread> void function_1() { for (size_t i = 0; i < 100; i++) { std::cout << "from function 1 阅读全文
posted @ 2019-02-28 11:15 卖雨伞的小男孩 阅读(408) 评论(0) 推荐(0) 编辑