合集-多处理器编程的艺术
摘要:前言 本章目的:构造一些原语,希望我们能利用这些原语来解决一些同步问题。 consensus: 一个同步原语的共识数是它能解决共识问题的最大线程数 上面的无法通过下面的synchronization primitives实现出来。 注意,这里的逻辑是,我们制造出来一些同步工具/同步原语,然后利用共识
阅读全文
摘要:简介 架构会影响性能。我们这次设计适合今天的多处理器的互斥协议。 1. 反复测试锁称为自旋(spinning)或忙等待(busy-waiting),延迟较短时是合理的 自旋(spinning)仅适用于多处理器,因为在单处理器上,线程自旋会占用 CPU 资源,阻止其他线程运行,导致效率低下。在多处理器
阅读全文
摘要:6.1 引言 lock-free的结论与wait-free一致 有一些类型的对象是universal的,给得够多就可以构建出来wait-free的linearizable实现 一个类在n线程的系统是universal <==> 这个类有一个consensus number >=n一个机器架构能有足够
阅读全文
摘要:8.1 Introduction monitor能够同步和数据合并,将各种东西封装起来在一个单个的模块 为什么我们需要这玩意儿? mutex.lock(); try { queue.enq(x) } finally { mutex.unlock(); } 这个代码不好。因为 1. 调用者根本不知道是
阅读全文
摘要:Chapter 9 Linked lists 9.1 如果要建立一个并发数据结构,我们当然可以直接拿一个顺序(synchronized action拉满)的实现,然后加满锁(给每一个操作都用同一个对象锁)。但是这就是粗粒度的同步,性能肯定差。 当并发的等级比较低的时候没什么问题,但是线程一多,肯定成
阅读全文