并发多核_期末复习
进展性
无死锁:某个申请锁的线程最终会获得锁。
无饥饿:每个申请锁的线程最终都会获得锁。
无锁:调用一个方法的线程中至少有一个最终会返回。
无等待:调用一个方法的所有线程最终都会返回。
共享内存
实际上,线性化与顺序一致性用于描述 执行序列(即历史)。
在共享内存中,提到了最特殊的可线性化的寄存器,称为原子寄存器。
安全寄存器:
正则寄存器:
原子寄存器:
第一章
讲述了如何从单读单写安全寄存器构建一个多读单写的原子寄存器
第二章 原子快照
在本章中,介绍了无锁的原子快照和无等待的原子快照
第五讲 共识协议和同步操作原语
wait-free 的共识协议可以保证每个线程都能在有穷步内终止。一致且有效的共识协议可以保证所有线程在终止时都能得到(即决定)一个相同的值(一致性),而且该值一定是其中某个线程的提议(有效性)。
共识协议包含2部分,propose和decide,propose用于提出每个线程的建议值,decide决定使用哪个建议值。
四、共识数概念
一个对象 X 的共识数为 n,如果它可以用来解决 n 线程的共识问题,但不能解决(n + 1)线程的共识问题。
七、同步原语
在处理架构中,原子寄存器的共识数为1,因此需要引入更为强力的,更为高效的同步操作,在这里为同步原语。
对象为RMWRegister,其方法包含CompareAndSet等。
注意到CompareAndSet的共识数无限大。这很显然,使用一个初始值为0的RMW寄存器,每一个线程都使用CompareAndSet(0, 线程ID)去争抢,只有一个可以修改成功,而修改成功的那就是决定的线程。
第六讲 空转锁和争用
锁包含空转锁(阻塞锁),非阻塞锁(不空转,休眠)
普通的空转锁:TAS,TTAS,回退锁(遇忙则等待一段时间再去请求锁)
四、队列锁(将锁拓展至队列)
第七讲 管程和阻塞同步
可以把锁机制和共享对象(如上述队列)打包,让对象管理自己的同步机制,这就是管程的概念。
一、管程
管程包含同步机制、对象和方法,支持对对象(方法)的互斥访问。管程的方法被调用时须获得管程的锁,在调用返回时释放锁。任何时刻至多有一个线程可以持有管程的锁,
管程所是阻塞锁,强调条件(Condition)
二、读写锁
读写锁可能导致写一致饥饿(),所以引入公平读写锁,当有线程申请写锁时,此时读锁只能被释放,而不能被加锁
三、可重入锁
保证同一个线程在递归获取锁时,能够获取()
四、信号量
第八讲 锁的应用:链表
包含细粒度锁,乐观锁,惰性锁,无锁链表
第九讲 并发队列(实际上也可以认为是应用)
2.1 部分有界队列
这里有界是指,当入队失败时不会停止,而是等待
2.2 无锁的无界队列

3.1 无界的无锁栈
第十讲 共享计数
三、计数网
计数网基于平衡器,通过构造平衡器实现计数网,概念很简单
满足步进特性的平衡网称为计数网。
普通计数网为非线性化的,
静态一致性
很清楚的讲解
没有太理解为什么双跳计数器是静态一致性的
四、衍射树
第十一讲
二、无锁哈希表
没什么好说的,非常失望





