并发编程
文章平均质量分 95
浅慕Antonio
分享编程知识
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【并发编程】第十一章 测试和调试多线程应用程序
有些类型的错误直接与并发的使用相关。原创 2024-12-22 16:26:57 · 1175 阅读 · 0 评论 -
【并发编程】第十章 并行算法
C++17 标准为 C++ 标准库引入了并行算法的概念。并行版本的函数签名与“普通”单线程版本相比,增加了一个新的参数std::execution::par 执行策略指示标准库可以使用多个线程。请注意,这是许可,而不是要求并行算法通常要做更多的总工作量,以便利用系统的并行性——如果可以将工作分配到100个处理器上,即使实现要做两倍的总工作,仍然可以获得50倍的整体加速。原创 2024-12-22 16:20:17 · 1358 阅读 · 0 评论 -
【并发编程】第九章 高级线程管理
在程序中预先创建并管理一组线程的机制可以并发执行的任务被提交到线程池,线程池将它们放在待处理工作的队列中。然后,每个工作线程从队列中取出一个任务,执行该任务,然后再循环回到队列中取出下一个任务。原创 2024-12-22 15:58:00 · 727 阅读 · 0 评论 -
【并发编程】第八章 设计并发代码
除了为递归调用启动一个新线程,可以选择将需要排序的区块推入一个线程安全的栈中。如果一个线程没有其他事情要做,它可以从栈中取出一个区块并对其进行排序。原创 2024-12-20 18:40:22 · 1022 阅读 · 0 评论 -
【并发编程】第六章 设计基于锁的并发数据结构
互斥锁本质上与并发相矛盾:一次只能有一个线程获取互斥锁。互斥锁通过明确阻止对其所保护数据的真实并发访问来保护数据结构,这被称为序列化序列化:线程轮流访问受互斥锁保护的数据;它们必须串行而不是并发地访问它。因此,必须仔细考虑数据结构的设计,以实现真正的并发访问如何使数据结构线程安全的基本方法(第三章):作为数据结构设计者,需要回答一些问题:所有这些问题都由一个单一的理念指导:如何最小化必须发生的序列化,并实现最大程度的真实并发性?在设计数据结构时,需要考虑的并发访问的安全性和实现真正并发访问的策略,以及如何通原创 2024-12-14 17:13:22 · 904 阅读 · 0 评论 -
【C++并发编程】第五章 C++内存模型与原子操作
使用原子操作访问内存位置是避免未定义行为的有效方法之一。虽然它不能完全阻止数据竞争,但可以确保程序在遇到并发问题时仍保持定义行为,提高程序的可靠性。原创 2024-12-09 17:28:02 · 1268 阅读 · 0 评论 -
【C++并发编程】第四章 同步并发操作
std::promise 提供了同样的功能。std::future 对象不会与任何其他对象共享异步状态的所有权,因此必须使用 std::move 将所有权转移给 std::shared_future,从而使 std::future 处于一个空状态,就好像它是一个默认构造函数一样。std::experimental::flex_barrier 的接口与 std::experimental::barrier 的接口只有一个不同之处:它有一个额外的构造函数,该构造函数接受一个完成函数以及一个线程计数。原创 2024-12-09 01:10:27 · 1459 阅读 · 0 评论 -
【并发编程】第三章 在线程之间共享数据
这被称为软件事务内存 (STM)。如果栈内部受到一个互斥锁的保护,那么在任何时候,只有一个线程可以运行栈的成员函数,因此调用可以很好地交错,但是对 do_something() 的调用可以并发运行。大多数情况下,如果认为需要一个递归互斥锁,可能需要更改你的设计,特别是,当持有锁时,类的不变量通常会被破坏,这意味着第二个成员函数在不变量被破坏时也需要工作。除非需要转移锁的所有权或者执行其他需要std::unique_lock的操作,否则,如果C++17的std::scoped_lock可用,最好还是使用它。原创 2024-12-07 15:29:06 · 1244 阅读 · 0 评论 -
【并发编程】第二章 线程管理
声明了一个名为my_thread的函数,该函数接受一个参数(参数类型为指向无参数且返回background_task对象的函数指针,无形参名称),并返回一个std::thread对象,而不是启动一个新线程。通过在 std::thread 的构造函数中指定 std::move§,big_object 的所有权首先被转移到新创建的线程的内部存储中,然后再被转移到 process_big_object 函数中。std::thread 构造函数的操作和 std::bind 的操作都是根据相同的机制定义的。原创 2024-12-06 22:29:21 · 774 阅读 · 0 评论 -
【并发编程】第一章 C++并发里的 Hello,World!
并发性指的是两个或更多个独立的活动同时发生。(同时走路和说话,或者每只手进行不同的动作;一个人在看足球比赛的同时另一个人可以去游泳)单核机器:任务交替执行。但它们之间也会有一定的间隔(灰色条块);为了进行交替执行,系统每次从一项任务切换到另一项任务时都必须执行上下文切换,这需要花费时间。操作系统必须保存当前正在运行的任务的CPU状态和指令指针,确定要切换到哪个任务,并重新加载被切换任务的CPU状态,然后,CPU可能还需要将新任务的指令和数据加载到缓存中双核机器:每项任务都可以在其自己的内核上执行。原创 2024-12-06 00:39:10 · 1103 阅读 · 0 评论
分享