随笔分类 -  并发

摘要:本文记述了与内存顺序中涉及的几种关系。 synchronizes-with(...与...同步) : 线程 A 中对于某个对象的存储操作 S,与线程 B 中对于同一对象的加载操作 L 同步。 happens-before(...发生于...之前): 无论是在单一线程内还是多线程间,某个操作发生于另一 阅读全文
posted @ 2025-07-25 20:42 green-cnblogs 阅读(6) 评论(0) 推荐(0)
摘要:本文记述了 C++11 中的 6 种内存顺序与 3 种原子操作类型之间的适用性。 存储操作 加载操作 读-修改-写操作 memory_order_seq_cst O O O memory_order_acq_rel O memory_order_release O O memory_order_ac 阅读全文
posted @ 2025-07-24 15:18 green-cnblogs 阅读(9) 评论(0) 推荐(0)
摘要:本文翻译了《Foundations of the C++ Concurrency Memory Model》的摘要和正文。译文如下: Foundations of the C++ Concurrency Memory Model Hans-J. Boehm, Sarita V. Adve 2008 阅读全文
posted @ 2025-07-04 19:01 green-cnblogs 阅读(31) 评论(0) 推荐(0)
摘要:本文摘要了《Java多线程设计模式》一书中提及的 Active Object 模式的适用场景,并针对书中例子(若干名称有微调)给出一份 C++ 参考实现及其 UML 逻辑图,也列出与之相关的模式。 ◆ 适用场景 多个调用方采用异步方式使用一个非线程安全且耗时较多的操作。 ◆ 解决方案 建立一个拥有独 阅读全文
posted @ 2025-05-16 19:45 green-cnblogs 阅读(34) 评论(0) 推荐(0)
摘要:本文摘要了《Java多线程设计模式》一书中提及的 Thread-Specific Storage 模式的适用场景,并针对书中例子(若干名称有微调)给出一份 C++ 参考实现及其 UML 逻辑图,也列出与之相关的模式。 ◆ 适用场景 让每个线程拥有独立的变量实例,使该变量拥有与线程相同的生命周期。 ◆ 阅读全文
posted @ 2025-05-09 19:23 green-cnblogs 阅读(20) 评论(0) 推荐(0)
摘要:本文摘要了《Java多线程设计模式》一书中提及的 Two-Phase Termination 模式的适用场景,并针对书中例子(若干名称有微调)给出一份 C++ 参考实现及其 UML 逻辑图,也列出与之相关的模式。 ◆ 适用场景 保证线程接收到了终止请求后,能够尽快并安全地终止线程。 ◆ 解决方案 定 阅读全文
posted @ 2025-04-30 20:07 green-cnblogs 阅读(36) 评论(0) 推荐(0)
摘要:本文摘要了《Java多线程设计模式》一书中提及的 Future 模式的适用场景,并针对书中例子(若干名称有微调)给出一份 C++ 参考实现及其 UML 逻辑图,也列出与之相关的模式。 ◆ 适用场景 当前线程将某个函数调用委托给其它线程去完成,自己可以继续后面的处理。仅在需要结果时才去获取被委托的函数 阅读全文
posted @ 2025-04-25 22:04 green-cnblogs 阅读(32) 评论(0) 推荐(0)
摘要:本文摘要了《Java多线程设计模式》一书中提及的 Worker Thread 模式的适用场景,并针对书中例子(若干名称有微调)给出一份 C++ 参考实现及其 UML 逻辑图,也列出与之相关的模式。 ◆ 适用场景 控制执行任务的线程的数量,进而提高计算资源的利用率。 ◆ 解决方案 用数组或集合存放一定 阅读全文
posted @ 2025-04-19 09:58 green-cnblogs 阅读(51) 评论(0) 推荐(0)
摘要:本文摘要了《Java多线程设计模式》一书中提及的 Thread-Per-Message 模式的适用场景,并针对书中例子(若干名称有微调)给出一份 C++ 参考实现及其 UML 逻辑图,也列出与之相关的模式。 ◆ 适用场景 当前线程将某个函数调用委托给其它线程去完成,自己可以继续后面的处理,而无需等待 阅读全文
posted @ 2025-04-11 20:06 green-cnblogs 阅读(15) 评论(0) 推荐(0)
摘要:本文摘要了《Java多线程设计模式》一书中提及的 Read-Write Lock 模式的适用场景,并针对书中例子(若干名称有微调)给出一份 C++ 参考实现及其 UML 逻辑图,也列出与之相关的模式。 ◆ 适用场景 当读取共享数据的线程多于更新共享数据的线程时,为了提高整体的吞吐量,并保证数据的安全 阅读全文
posted @ 2025-04-03 20:13 green-cnblogs 阅读(62) 评论(0) 推荐(0)
摘要:本文摘要了《Java多线程设计模式》一书中提及的 Producer-Consumer 模式的适用场景,并针对书中例子(若干名称有微调)给出一份 C++ 参考实现及其 UML 逻辑图,也列出与之相关的模式。 ◆ 适用场景 为了匹配数据的生产者(Producer)线程与消费者(Consumer)线程之间 阅读全文
posted @ 2025-03-28 20:04 green-cnblogs 阅读(39) 评论(0) 推荐(0)
摘要:本文摘要了《Java多线程设计模式》一书中提及的 Balking 模式的适用场景,并针对书中例子(若干名称有微调)给出一份 C++ 参考实现及其 UML 逻辑图,也列出与之相关的模式。 ◆ 适用场景 当线程访问的共享数据没有准备好时,就放弃后续的操作。 ◆ 解决方案 在临界区中判断共享数据是否准备好 阅读全文
posted @ 2025-03-21 20:45 green-cnblogs 阅读(15) 评论(0) 推荐(0)
摘要:本文摘要了《Java多线程设计模式》一书中提及的 Guarded Suspension 模式的适用场景,并针对书中例子(若干名称有微调)给出一份 C++ 参考实现及其 UML 逻辑图,也列出与之相关的模式。 ◆ 适用场景 当线程访问的共享数据没有准备好时,让该线程进入等待状态,直到数据被准备好后由其 阅读全文
posted @ 2025-03-14 20:44 green-cnblogs 阅读(16) 评论(0) 推荐(0)
摘要:本文摘要了《Java多线程设计模式》一书中提及的 Immutable 模式的适用场景,并针对书中例子(若干名称有微调)给出一份 C++ 参考实现及其 UML 逻辑图,也列出与之相关的模式。 ◆ 适用场景 多个线程在同时访问共享数据时,只需要读取数据而不必修改数据。 ◆ 解决方案 无需使用锁机制,也不 阅读全文
posted @ 2025-03-07 19:29 green-cnblogs 阅读(25) 评论(0) 推荐(0)
摘要:本文摘要了《Java多线程设计模式》一书中提及的 Single Threaded Execution 的适用场景,并针对书中例子(若干名称有微调)给出一份 C++ 参考实现及其 UML 逻辑图,也列出与之相关的模式。 ◆ 适用场景 避免因多个线程同时访问一个共享数据而破坏数据的完整性。 ◆ 解决方案 阅读全文
posted @ 2025-02-28 20:53 green-cnblogs 阅读(29) 评论(0) 推荐(0)
摘要:本文中,笔者尝试组合了非阻塞式和阻塞式的队列,成为新的组合式线程池。线程池有一个共享任务队列,每个工作线程各有一个工作任务队列。线程池用户提交的任务,先被保存在共享任务队列中。线程池的调度器线程将共享任务队列中的任务分派给工作线程的工作任务队列,工作线程从工作任务队列中获取任务并执行。 【注】图中 阅读全文
posted @ 2022-01-10 14:16 green-cnblogs 阅读(386) 评论(0) 推荐(1)
摘要:笔者根据 Anthony Williams 在《C++并发编程实战》中所述, 某个工作线程在任务队列的头部操作,而其它工作线程在任务队列的尾部操作。这实际上意味着这个队列对于拥有线程来说是一个后进先出的栈。最近被放到队列中的任务会最先被取出来执行。从缓存的角度来说这可以提高性能,因为对比之前被放入队 阅读全文
posted @ 2021-12-29 15:20 green-cnblogs 阅读(400) 评论(0) 推荐(0)
摘要:本文中,笔者为 《简单的线程池(四)》 提及的非阻塞独占式线程池增加了一项功能:当某个工作线程的任务队列中无工作任务时,此工作线程可以去其他工作线程的任务队列中获取任务。笔者称之为非阻塞互助式线程池。 笔者对比了测试结果与 《简单的线程池(六)》 的数据,得出了添加功能前后的差异。 本文不再赘诉与 阅读全文
posted @ 2021-12-23 21:02 green-cnblogs 阅读(290) 评论(0) 推荐(0)
摘要:本文汇总了 《简单的线程池(三)》、《简单的线程池(四)》、《简单的线程池(五)》 中的测试数据,并在此基础上对比了 非阻塞共享式、阻塞共享式、非阻塞独占式、阻塞独占式 这四个线程池的吞吐量指标。笔者对结果进行了分析,给出笔者的结论。如对测试方案、概念等有不明之处,请参考该博文。 【注】非阻塞共享式 阅读全文
posted @ 2021-12-17 16:18 green-cnblogs 阅读(328) 评论(0) 推荐(0)
摘要:笔者在 《简单的线程池(四)》 中采用了非阻塞的(nonblocking)线程同步方式,在此文中笔者将采用阻塞的(blocking)线程同步方式(参考 《简单的线程池(二)》) 实现相同特性的线程池。 本文不再赘述与 《简单的线程池(二)》、《简单的线程池(四)》 相同的内容。如有不明之处,请参考该 阅读全文
posted @ 2021-12-14 13:15 green-cnblogs 阅读(145) 评论(0) 推荐(0)