C++ 多线程

C++ 基于锁设计更加复杂的数据结构

admin阅读(606)赞(2)

C++ 基于锁设计更加复杂的数据结构 栈和队列都很简单:接口相对固定,并且它们应用于比较特殊的情况。并不是所有数据结构都像它们一样简单;大多数数据结构支持更加多样化的操作。原则上,这将增大并行的可能性,但是也让对数据保护变得更加困难,因为要...

C++ 基于锁的并发数据结构|极客教程

C++ 基于锁的并发数据结构

admin阅读(588)赞(2)

C++ 基于锁的并发数据结构 基于锁的并发数据结构设计,需要确保访问线程持有锁的时间最短。对于只有一个互斥量的数据结构来说,这十分困难。需要保证数据不被锁之外的操作所访问到,并且还要保证不会在固有结构上产生条件竞争(如第3章所述)。当你使用...

C++ 并发数据结构设计的意义

admin阅读(541)赞(1)

C++ 为并发设计的意义何在? 设计并发数据结构,意味着多个线程可以并发的访问这个数据结构,线程可对这个数据结构做相同或不同的操作,并且每一个线程都能在自己的自治域中看到该数据结构。且在多线程环境下,无数据丢失和损毁,所有的数据需要维持原样...

C++ 并发数据结构设计

admin阅读(617)赞(1)

C++ 基于锁的并发数据结构设计 主要内容 并发数据结构设计的意义 指导如何设计 实现为并发设计的数据结构 在C++ 内存模型和原子类型操作中,我们对底层原子操作和内存模型有了详尽的了解。在本栏目中,我们将先将底层的东西放在一边,来对数据结...

C++ 同步操作和强制排序|极客教程

C++ 同步操作和强制排序

admin阅读(663)赞(2)

C++ 同步操作和强制排序,假设你有两个线程,一个向数据结构中填充数据,另一个读取数据结构中的数据。为了避免恶性条件竞争,第一个线程设置一个标志,用来表明数据已经准备就绪,并且第二个线程在这个标志设置前不能读取数据。下面的程序清单就是这样的...

C++ 原子操作和原子类型|极客教程

C++ 原子操作和原子类型

admin阅读(752)赞(3)

C++中的原子操作和原子类型,原子操作 是个不可分割的操作。 在系统的所有线程中,你是不可能观察到原子操作完成了一半这种情况的; 它要么就是做了,要么就是没做,只有这两种可能。 如果从对象读取值的加载操作是 原子 的,而且对这个对象的所有修...

C++ 内存模型基础|极客教程

C++ 内存模型基础

admin阅读(656)赞(2)

C++ 内存模型基础,这里从两方面来讲内存模型:一方面是基本结构,这与事务在内存中是怎样布局的有关;另一方面就是并发。对于并发基本结构很重要,特别是在低层原子操作。所以我将会从基本结构讲起。C++中它与所有的对象和内存位置有关。 C++ 对...

C++ 内存模型和原子类型操作

admin阅读(667)赞(2)

C++内存模型和原子类型操作,主要内容 C++11内存模型详解 标准库提供的原子类型 使用各种原子类型 原子操作实现线程同步功能 C++11标准中,有一个十分重要特性,常被程序员们所忽略。它不是一个新语法特性,也不是新工具,它就是多线程(感...

C++ 使用同步操作简化代码|极客教程

C++ 使用同步操作简化代码

admin阅读(606)赞(2)

C++ 使用同步操作简化代码,同步工具的使用在本章称为构建块,你可以之关注那些需要同步的操作,而非具体使用的机制。当需要为程序的并发时,这是一种可以帮助你简化你的代码的方式,提供更多的函数化的方法。比起在多个线程间直接共享数据,每个任务拥有...

C++ 限定等待时间

admin阅读(840)赞(2)

C++ 限定等待时间,之前介绍过的所有阻塞调用,将会阻塞一段不确定的时间,将线程挂起直到等待的事件发生。在很多情况下,这样的方式很不错,但是在其他一些情况下,你就需要限制一下线程等待的时间了。这允许你发送一些类似“我还存活”的信息,无论是对...

C++ 使用期望等待一次性事件|极客教程

C++ 使用期望等待一次性事件

admin阅读(572)赞(2)

C++ 使用期望等待一次性事件,假设你乘飞机去国外度假。当你到达机场,并且办理完各种登机手续后,你还需要等待机场广播通知你登机,可能要等很多个小时。你可能会在候机室里面找一些事情来打发时间,比如:读书,上网,或者来一杯价格不菲的机场咖啡,不...

C++ 等待一个事件或其他条件

admin阅读(825)赞(3)

C++ 等待一个事件或其他条件,假设你在旅游,而且正在一辆在夜间运行的火车上。在夜间,如何在正确的站点下车呢?一种方法是整晚都要醒着,然后注意到了哪一站。这样,你就不会错过你要到达的站点,但是这样会让你感到很疲倦。另外,你可以看一下时间表,...

C++ 同步并发操作

admin阅读(592)赞(1)

C++ 同步并发操作,本章主要内容 等待事件 带有期望的等待一次性事件 在限定时间内等待 使用同步操作简化代码 在C++ 线程间共享数据中,我们看到各种在线程间保护共享数据的方法。当你不仅想要保护数据,还想对单独的线程进行同步。例如,在第一...

C++ 保护共享数据的替代设施

admin阅读(416)赞(2)

C++ 保护共享数据的替代设施,互斥量是最通用的机制,但其并非保护共享数据的唯一方式。这里有很多替代方式可以在特定情况下,提供更加合适的保护。 一个特别极端(但十分常见)的情况就是,共享数据在并发访问和初始化时(都需要保护),但是之后需要进...

C++ 使用互斥量保护共享数据

admin阅读(621)赞(2)

C++ 使用互斥量保护共享数据,当程序中有共享数据,肯定不想让其陷入条件竞争,或是不变量被破坏。那么,将所有访问共享数据结构的代码都标记为互斥岂不是更好?这样任何一个线程在执行这些代码时,其他任何线程试图访问共享数据结构,就必须等到那一段代...

C++ 共享数据带来的问题|极客教程

C++ 共享数据带来的问题

admin阅读(461)赞(2)

C++ 共享数据带来的问题,当涉及到共享数据时,问题很可能是因为共享数据修改所导致。如果共享数据是只读的,那么只读操作不会影响到数据,更不会涉及对数据的修改,所以所有线程都会获得同样的数据。但是,当一个或多个线程要修改共享数据时,就会产生很...

C++ 线程间共享数据

admin阅读(612)赞(2)

C++ 线程间共享数据,本章主要内容 共享数据带来的问题 使用互斥量保护数据 数据保护的替代方案 C++ 线程管理中,我们已经对线程管理有所了解了,现在让我们来看一下“共享数据的那些事”。 想象一下,你和你的朋友合租一个公寓,公寓中只有一个...

C++ 标识线程

admin阅读(533)赞(2)

C++ 标识线程,线程标识类型是std::thread::id,可以通过两种方式进行检索。第一种,可以通过调用std::thread对象的成员函数get_id()来直接获取。如果std::thread对象没有与任何执行线程相关联,get_i...

C++ 运行时决定线程数量

admin阅读(630)赞(2)

C++ 运行时决定线程数量,std::thread::hardware_concurrency()在新版C++标准库中是一个很有用的函数。这个函数将返回能同时并发在一个程序中的线程数量。例如,多核系统中,返回值可以是CPU核芯的数量。返回值...

C++ 转移线程所有权

admin阅读(561)赞(1)

C++ 转移线程所有权,假设要写一个在后台启动线程的函数,想通过新线程返回的所有权去调用这个函数,而不是等待线程结束再去调用;或完全与之相反的想法:创建一个线程,并在函数中转移所有权,都必须要等待线程结束。总之,新线程的所有权都需要转移。 ...

C++ 向线程函数传递参数

admin阅读(588)赞(2)

C++ 向线程函数传递参数,清单2.4中,向std::thread构造函数中的可调用对象,或函数传递一个参数很简单。需要注意的是,默认参数要拷贝到线程独立内存中,即使参数是引用的形式,也可以在新线程中进行访问。再来看一个例子: void f...

C++ 线程管理的基础

admin阅读(664)赞(2)

C++ 线程管理的基础,每个程序至少有一个线程:执行main()函数的线程,其余线程有其各自的入口函数。线程与原始线程(以main()为入口函数的线程)同时运行。如同main()...

C++ 线程管理

admin阅读(663)赞(2)

C++ 线程管理,主要内容 启动新线程 等待线程与分离线程 线程唯一标识符 好的!看来你已经决定使用多线程了。先做点什么呢?启动线程、结束线程,还是如何监管线程?C++标准库中只需要管理std::thread关联的线程,无需把注意力放在其他...

C++ 并发入门

admin阅读(627)赞(1)

C++ 并发入门,ok!现在你有一个能与C++11标准兼容的编译器。接下来呢?一个C++多线程程序是什么样子呢?其实,它看上去和其他C++程序差不多,通常是变量、类以及函数的组合。唯一的区别在于某些函数可以并发运行,所以需要确保共享数据在并...

C++ 中的并发和多线程

admin阅读(658)赞(1)

C++中的并发和多线程,通过多线程为C++并发提供标准化支持是件新鲜事。只有在C++11标准下,才能编写不依赖平台扩展的多线程代码。了解C++线程库中的众多规则前,先来了解一下其发展的历史。 C++多线程历史 C++98(1998)标准不承...

C++ 为什么使用并发

admin阅读(546)赞(1)

C++ 为什么使用并发,主要原因有两个:关注点分离(SOC)和性能。事实上,它们应该是使用并发的唯一原因;如果你观察得足够仔细,所有因素都可以归结到其中的一个原因(或者可能是两个都有。当然,除了像“就因为我愿意”这样的原因之外)。 为了分离...

C++ 并发和多线程是什么|极客教程

C++ 并发和多线程是什么

admin阅读(556)赞(4)

C++ 何谓并发 最简单和最基本的并发,是指两个或更多独立的活动同时发生。 并发在生活中随处可见,我们可以一边走路一边说话,也可以两只手同时作不同的动作,还有我们每个人都过着相互独立的生活——当我在游泳的时候,你可以看球赛,等等。 计算机系...

C++ 并发

admin阅读(1346)赞(3)

C++并发主要内容 何谓并发和多线程 应用程序为什么要使用并发和多线程 C++的并发史 一个简单的C++多线程程序 令C++用户振奋的时刻到了。距初始的C++标准(1998年)发布13年后,C++标准委员会给语言本身,以及标准库,带来了一次...

近期文章