摘要: 使用条件变量的最经典的场景就是生产者和消费者 1.最普通的生产者和消费者代码 #include<iostream> #include<deque> #include<thread> #include<mutex> #include<functional> using namespace std; s 阅读全文
posted @ 2020-08-02 23:03 cyssmile 阅读(257) 评论(0) 推荐(0) 编辑
摘要: 1.一般的lock()和unlock() 一般的我们会写出这样的代码 std::mutex mu; mu.lock(); //.... mu.unlock() 这种方式我们是希望//...中间执行,保证只有有个线程进入临界区,但是这里存在一个问题,就是如果线程在临界区发生错误或者return,导致m 阅读全文
posted @ 2020-08-02 21:45 cyssmile 阅读(913) 评论(0) 推荐(0) 编辑
摘要: 在多线程的代码中,有时候有些操作只需要执行一次,比如fstream中打开文件open() 首先是不使用once_flag解决这种问题的缺陷和改进 1.示例代码的问题 #include<iostream> #include<thread> #include<mutex> #include<string 阅读全文
posted @ 2020-08-02 16:49 cyssmile 阅读(373) 评论(0) 推荐(0) 编辑
摘要: c++多线程中死锁多出现在使用多个mutex,而mutex的顺序不一样。比如下面的代码为了保证输出的原子性,在两个输出的函数中使用了两个mutex 但是这两个mutex锁的顺序是不一样的,结果就造成了死锁。 #include<iostream> #include<thread> #include<m 阅读全文
posted @ 2020-08-02 15:48 cyssmile 阅读(1227) 评论(0) 推荐(0) 编辑