C++并发编程
C++并发编程
~青萍之末~
弱者总有弱者的理由
展开
-
Thread参数传递问题
一、类的普通成员函数作为Thread的参数class threadtest{private:public: threadtest() { } ~threadtest() { } // 类的普通成员函数 void test_fun1(int num) { for (int i = 0; i < num; i++) cout << "thread test1" << endl; ret原创 2020-07-04 17:34:16 · 2932 阅读 · 0 评论 -
C++11多线程知识点总结
一、多线程的基本概念1、进程与线程的区别和联系进程:进程是一个动态的过程,是一个活动的实体。简单来说,一个应用程序的运行就可以被看做是一个进程;线程:是运行中的实际的任务执行者。可以说,进程中包含了多个可以同时运行的线程。通俗理解:例如你打开微信就是打开一个进程,在微信里面和好友视频聊天就是开启了一条线程。两者之间的关系: 一个进程里面可以有多条线程,至少有一条线程。 一条线程一...原创 2018-07-27 11:39:42 · 4627 阅读 · 3 评论 -
线程池简介及其实现
一、为什么需要线程池 在面向对象编程中 ,创建和销毁对象是很耗时的,因为创建一个对象要获取内存资源或者其他更多资源.所以在日常编程中才会有意的避免过多的创建并不必要的对象。 线程的创建和销毁也是同样,而且相比于普通的对象更为消耗资源.线程池技术的引入,就是为了解决这一问题。1、线程池简介 线程池是指在初始化一个多线程应用程序过程中创建的一个线程集合,线程池在任务未到来之前,会...转载 2018-07-27 10:36:59 · 400 阅读 · 0 评论 -
生产者消费者模型
生产者消费者问题是多线程并发中一个非常经典的问题,相信学过操作系统课程的同学都清楚这个问题的根源。本文将就四种情况分析并介绍生产者和消费者问题,它们分别是:单生产者-单消费者模型,单生产者-多消费者模型,多生产者-单消费者模型,多生产者-多消费者模型,我会给出四种情况下的 C++11 并发解决方案。一、单生产者-单消费者模型 顾名思义,单生产者-单消费者模型中只有一个生产者和一个消费...转载 2018-07-23 20:04:44 · 305 阅读 · 0 评论 -
原子操作-atomic
一、原子操作简介 所谓的原子操作,取的就是“原子是最小的、不可分割的最小个体”的意义,它表示在多个线程访问同一个全局资源的时候,能够确保所有其他的线程都不在同一时间内访问相同的资源。也就是他确保了在同一时刻只有唯一的线程对这个资源进行访问。这有点类似互斥对象对共享资源的访问的保护,但是原子操作更加接近底层,因而效率更高。原子操作不需要加锁。 原子类型对象的主要特点就是从不同线程访问不会...原创 2018-07-23 19:52:19 · 1561 阅读 · 1 评论 -
条件变量-condition_variable
一、condition_variable条件变量简介 当std::condition_variable对象的某个wait函数被调用的时候,它使用std::unique_lock(通过std::mutex) 来锁住当前线程。当前线程会一直被阻塞,直到另外一个线程在相同的std::condition_variable对象上调用了notification函数来唤醒当前线程。condition_...原创 2018-07-23 19:46:39 · 1891 阅读 · 1 评论 -
访问异步操作结果-future
一、std::future 通常一个异步操作我们是不能马上就获取操作结果的,只能在未来某个时候获取。我们可以以同步等待的方式来获取结果,可以通过查询future的状态(future_status)来获取异步操作的结果。future_status有三种状态: 1. deferred:异步操作还没开始; 2. ready:异步操作已经完成; 3. timeout:异步操作超时。...原创 2018-07-23 19:35:26 · 1211 阅读 · 0 评论 -
锁对象---lock_guard和unique_lock
C++11 标准为我们提供了两种基本的锁类型,分别如下:std::lock_guard,与 Mutex RAII 相关,方便线程对互斥量上锁。std::unique_lock,与 Mutex RAII 相关,方便线程对互斥量上锁,但提供了更好的上锁和解锁控制。另外还提供了几个与锁类型相关的 Tag 类,分别如下:std::adopt_lock_t,一个空的标记类,定义如下:原创 2017-04-30 14:32:14 · 10226 阅读 · 0 评论 -
互斥量mutex
线程同步指多个线程协调地,有序地同步使用共享资源。多线程共享进程资源,一个线程访问共享资源需要一段完整地时间才能完成其读写操作,如果在这段时间内被其他线程打断,就会产生各种不可预知的错误。协调线程按一定的规则,不受打扰地访问共享资源,保证正确性,这便是线程同步的出发点。互斥量,是最简单的线程同步机制,也是最常用的同步策略。一、互斥量(mutex): 互斥量是一种线程同步对象原创 2017-04-29 18:28:44 · 785 阅读 · 0 评论 -
初识线程
1、线程与进程 进程是一个具有独立功能程序的运行实体,如某一个程序,运行时便产生一个进程;通常一个进程包含一个或多个线程。普通C程序多是只含有一个线程的进程,但是大多数情况下遇到的是多线程的进程。 线程与进程都是操作系统的概念。不同进程之间相互独立,同一进程的线程共享该进程的地址空间及其他资源。 线程与进程关系如下图:2、与 C++11 多线程原创 2017-04-29 14:39:34 · 495 阅读 · 0 评论