
多线程
potxxx
>_<
展开
-
c++并发编程(六)—— 基于锁的并发数据结构设计
在我们进行并发编程的时候,如果多线程使用到了数据结构,那么程序设计过程中需要保证此数据结构的正确同步。有两种方法:1、选择单独的互斥元与外部锁来保护数据2、设计一个可以同时访问的数据结构其中前几节我们涉及到了第一种方法,现在我们重点描述下第二种方法。使用锁和条件变量的线程安全队列template<typename T>class threadsafe_queue...原创 2019-02-25 20:18:12 · 528 阅读 · 0 评论 -
c++并发编程(一)—— hello,thread
前言之前一直使用pthread作为c++的线程库,现在有空了来了解一下c++标准线程库。为什么需要并发?为了划分关注点而使用并发 为了性能的提升使用c++标准库的并发支持c++11标准发布带来了标准c++线程库,包含了用于管理线程<thread>、保护共享数据<mutex>、线程间同步操作<future、condition_variable>...原创 2019-02-17 13:38:29 · 287 阅读 · 0 评论 -
c++并发编程(二)——管理线程 thread类
启动线程同上节所讲,线程是通过构造std::thread对象来开始的:void do_some_work();std::thread my_thread(do_some_work);使用可调用类型:#include<iostream>#include<thread>class func {public: void operator()() ...原创 2019-02-17 20:03:38 · 377 阅读 · 2 评论 -
c++并发编程(三)——在线程间共享数据 mutex
c++标准提供的保护共享数据的最基本机制是互斥元(mutex)。std::mutex my_mutex;void fun() { my_mutex.lock(); //互斥元加锁 do_something(); my_mutex.unlock(); //互斥元解锁}void fun2() { std::lock_guard<std::mu...原创 2019-02-18 15:10:05 · 504 阅读 · 0 评论 -
c++并发编程(四)——同步并发操作 condition_variable&future
c++标准库提供条件变量以及期值等工具来等待事件以及简化操作的同步。std::this_thread::sleep_for(std::chrono::milliseconds(100)); //当前线程休眠100毫秒使用std::condition_variable条件变量等待数据int data_num = 10; std::queue<int>...原创 2019-02-18 20:04:49 · 425 阅读 · 0 评论 -
c++并发编程(五)—— 原子类型与原子操作 atomic
原子操作是一个不可分割的操作,标准c++中通过原子类型来获得原子操作。从一个简单的例子来看看使用原子类型的作用:std::atomic<int> sum = 0; //int sum = 0;void fun(){ for (int i = 0; i<100000; ++i) sum ++; //使用原子类型对sum的...原创 2019-02-20 16:14:12 · 1978 阅读 · 0 评论 -
c++并发编程(七)—— 线程中断
有些线程是作为长时间工作的,其运行函数内部都会有个无限循环,但是某些时候我们希望能够主动停止线程:如人为停止或某一条件满足后退出。这里我们首先看看一个简单的思路:要想从一个线程终止另外一个线程,我们可以设置一个flag,这两个线程均可以访问的到,于是需要被中断的线程只需要检测这个flag的状态是否被改变,并由此作出是否中断的决定。这里是一个例子:class thread_class ...原创 2019-02-26 10:52:14 · 7159 阅读 · 0 评论