获得徽章 0
- 死锁产生的四个必要条件 (Edward G. Coffman, 1971):
互斥:一个资源每次只能被一个进程使用(比如锁)
请求与保持:一个进程请求资阻塞时,不释放已获得的资源
不剥夺:进程已获得的资源不能强行剥夺
循环等待:若干进程之间形成头尾相接的循环等待资源关系评论点赞 - 硬件提供的原子性指令常见的有test and set, compare and swap。之所以compare and swap性能更优的原因,是在compare 不等的情况下,省去一次内存的写入。具体怎么实现其实是基于 Load-Reserved/Store-Conditional。Load-Reserved就是,在 load的时候,在内存上标记 reserved (盯上你了),中断、其他处理器写入都会导致标记消除。Store-Conditional就是,如果 “盯上” 未被解除,则写入。compare and swap 的话,compare 是一次load操作,load的同时放上一个标记,比较结果如果不符合预期,直接返回旧值, 如果符合预期,预备把新值写入内存,这个时候如果发现标记没了,就会重新开始(retry),直到成功写入为止。
而test and set, 就直接交换了。
compare and swap 不仅可以通过retry的方式实现原子操作,而且可以检测原子操作拥堵 (如果 store conditional 失败太多)。展开评论点赞