C++11多线程
阿修罗it
科学是神圣的
展开
-
C++和双重检查锁定模式(DCLP)的风险
多线程其实就是指两个任务一前一后或者同时发生。1 简介当你在网上搜索设计模式的相关资料时,你一定会找到最常被提及的一个模式:单例模式(Singleton)。然而,当你尝试在项目中使用单例模式时,一定会遇到一个很重要的限制:若使用传统的实现方法(我们会在下文解释如何实现),单例模式是非线程安全的。程序员们为了解决这一问题付出了很多努力,其中最流行的一种解决方法是使用一个新的设转载 2016-05-29 22:07:32 · 419 阅读 · 0 评论 -
C++11中once_flag,call_once实现
本文的分析基于llvm的libc++,而不是gun的libstdc++,编译环境VS2013和GCC4.8在多线程编程中,有一个常见的情景是某个任务只需要执行一次。在C++11中提供了很方便的辅助类once_flag,call_once。声明首先来看一下once_flag和call_once的声明:struct once_flag{ constexpr原创 2016-05-17 14:31:00 · 648 阅读 · 1 评论 -
WIN32--线程睡眠
目的:有时候我们想让线程不被调度一定的时间,也就是说让线程睡眠一段时间。API 接口:在 Win32中可以调用 Sleep,SleepEx 和 SwitchToThread 三个API。VOID WINAPI Sleep(DWORD dwMilliseconds);DWORD WINAPI SleepEx(DWORD dwMilliseconds, BOOl原创 2016-05-20 11:05:04 · 2958 阅读 · 0 评论 -
C++11并发编程实战
3.1 线程间共享数据的“问题”invariants 被破坏(比如说一个读一个写)3.1.1 race conditions条件竞争是:In concurrency, a race condition is anything where the outcome depends on the relative ordering of execution of operations o转载 2016-07-10 11:19:38 · 899 阅读 · 0 评论 -
第五章 C++的内存模型和原子操作
5.1 Memory model basics (内在模型基础)Memory model 涉及两个方面:structural 和 concurrencystructural 是基础,主要是对象的布局5.1.1 Objects and memory locationThe C++ Standard defines an object as “a region of storage,”转载 2016-07-10 11:21:10 · 1554 阅读 · 0 评论 -
C++11中的进行线程同步的方法
《C++ concurreny in action》 第四章 Synchronizing concurrent operations这一章主要讲C++11中的进行线程同步的方法4.1 Waiting for an event or other condition经常遇到的一种场景是一个线程A需要等待另一个线程B完成一些“事”(操作)才能往下运行继续处理。有以下几种“办法”一转载 2016-07-10 11:27:14 · 4115 阅读 · 0 评论 -
用C++11的std::async代替线程的创建
c++11中增加了线程,使得我们可以非常方便的创建线程,它的基本用法是这样的:void f(int n);std::thread t(f, n + 1);t.join(); 但是线程毕竟是属于比较低层次的东西,有时候使用有些不便,比如我希望获取线程函数的返回结果的时候,我就不能直接通过thread.join()得到结果,这时就必须定义一个变量,在线程函数中去给这个变量赋值,然原创 2016-07-22 14:45:43 · 384 阅读 · 0 评论 -
自旋锁与互斥量
互斥量是阻塞锁,当某线程无法获取互斥量时,该线程会被直接挂起,该线程不再消耗CPU时间,当其他线程释放互斥量后,操作系统会激活那个被挂起的线程,让其投入运行。两种锁适用于不同场景:如果是多核处理器,如果预计线程等待锁的时间很短,短到比线程两次上下文切换时间要少的情况下,使用自旋锁是划算的。如果是多核处理器,如果预计线程等待锁的时间较长,至少比两次线程上下文切换的时间要长,建原创 2016-06-20 22:18:48 · 400 阅读 · 0 评论