C++11多线程
CL_XYZ
这个作者很懒,什么都没留下…
展开
-
C++11多线程学习(1)atomic_flag
d学了这么久我才刚刚知道C++11居然对多线程有如此丰富的支持,一方面感慨自己学的还是太少了,一方面真的很开心可以告别自己封装mutex,线程,currentthread这些东西时代了。最重要的一点,在windows上写的代码和在linux上也可以编译运行,这意味着可以使用宇宙第一IDE来调试多线程程序。我会用这个系列记录自己学习C++11多线程的过程。C++11中引入了thread这个头文件...原创 2019-03-30 13:01:46 · 856 阅读 · 0 评论 -
C++11多线程学习(2)自旋锁任务队列
使用上一节的原子数构造成的自旋锁完成了一个任务队列的模型。因为condition_variable只能和mutex配合,想要让他和别的锁配合就要用condition_variable_any#include<iostream>#include<atomic>#include<thread>#include<vector>#include...原创 2019-03-30 15:01:04 · 622 阅读 · 0 评论 -
C++11多线程学习(3)条件变量
C++11中的条件变量支持把判断条件写到参数里。配合lamda表达式让程序代码更加清晰。第一个参数只支持unique_lock他和lock_guard的区别在于可以在作用域内加锁再解锁,而lock_gurad只能在构造和析构的时候加锁和解锁。下面是对cv的小应用,轮流打印AB#include <thread>#include <iostream>#includ...原创 2019-03-31 12:14:52 · 342 阅读 · 0 评论 -
C++11线程池
线程池其实就是把任务队列和工作线程绑到一起,提供一个向任务队列中添加任务的接口,下面的代码为了表达更加清楚没有分成头文件和源文件,仅仅是提供思路。同步机制利用的互斥锁+条件变量,也可以使用C++11提供的原子数封装的自旋锁+条件变量。两种组合的区别在于,自旋锁比较适合当任务比较简单的时候使用,可以减少陷入内核的次数,但当任务比较复杂,线程需要较长时间等待的时候,自旋锁会把大量时间浪费在忙等待上...原创 2019-04-05 17:36:53 · 190 阅读 · 0 评论 -
使用CAS操作实现的无锁栈
CAS(compare and set),是原子数支持的一种操作,假如我们有一个原子数类,那么他其中的CAS函数大致可以理解为这样bool compare_and_set(T&a,T&b){ if(*this==a) { *this=b; return true; } else { a=...原创 2019-04-07 17:58:16 · 622 阅读 · 0 评论