
线程
文章平均质量分 68
土戈
软件开发
展开
-
std与boost线程的一点区别,自定义线程接口类
boost有interrupt()函数,可以直接打断终止,可以打断sleep。std的没有interrupt(),只能jion,不能打断sleep。boost自定义线程接口要安装boost库,包含头文件和lib,还要链接CMakeLists.txt文件如下cmake_minimum_required(VERSION 2.8)set(CMAKE_CXX_FLAGS "${C...原创 2018-09-02 12:52:58 · 2180 阅读 · 0 评论 -
C++11 线程与同步总结
while(true) { if(pool.try_get_work()) { // do work } else { std::this_thread::yield(); // other threads can push work to the queue now }}std::this_thread::yield() 的目的是避免一个线程(that s...原创 2018-08-16 09:33:56 · 396 阅读 · 0 评论 -
C++多线程多少个线程算多?
程序一启动就创建了60个线程,太多了,应该控制一下。也有同学提出不同意见,说线程多不是问题,别把它当成指标,盯住内存、CPU才是正经。使用多线程,为的是提高执行效率;那么,是不是线程越多越好呢?假设我们有100个下载任务,我们可以有以下3种实现方法:使用一个线程,依次执行100个下载任务; 使用100个线程,每个线程执行一个下载任务; 使用10个线程,每个线程依次执行10个下载任务。...转载 2018-10-25 16:54:08 · 6966 阅读 · 1 评论 -
C++11的原子量与内存序浅析
一、多线程下共享变量的问题(a) i++问题在多线程编程中,最常拿来举例的问题便是著名的i++ 问题,即:多个线程对同一个共享变量i执行i++ 操作。这样做之所以会出现问题的原因在于i++这个操作可以分为三个步骤:step operation 1 i->reg(读取i的值到寄存器) 2 inc-reg(在寄存器中自增i的值) 3 reg->...转载 2018-10-29 17:06:47 · 1182 阅读 · 0 评论 -
拷贝不变(trivially copyable)类型
Trivial 类型上面提到的第一个特性Trivial:trivial类型支持静态初始化。如果一个类型是拷贝不变的(trivially copyable),使用memcpy这种方式把它的数据从一个地方拷贝出来会得到相同的结果。 C++标准把trivial类型定义如下:一个拷贝不变(trivially copyable)类型是指: 没有non-trivial 的复制构造函数 ...转载 2018-10-31 17:34:34 · 6632 阅读 · 0 评论 -
原子操作的底层实现原理及cas问题
术语定义术语名称 英文 解释 缓存行 Cache line 缓存的最小操作单位 比较并交换 Compare and Swap CAS操作需要输入两个数值,一个旧值(期望操作前的值)和一个新值,在操作期间先比较下在旧值有没有发生变化,如果没有发生变化,才交换成新值,发生了变化则不交换。 CPU流水线 CPU pipeline CPU流水...转载 2018-10-31 17:43:10 · 1566 阅读 · 0 评论 -
并发编程(三): 使用C++11实现无锁stack(lock-free stack)
C++11中CAS实现:template< class T>struct atomic{public: bool compare_exchange_weak( T& expected, T desired, std::memory_order success, ...转载 2018-10-31 17:43:22 · 583 阅读 · 0 评论