【发布时间】:2009-07-28 12:40:58
【问题描述】:
在数据结构同步的上下文中,有人可以澄清“无锁”和“非阻塞”之间的区别吗?这些术语似乎被很多人互换使用,但我还不确定是否在某处隐藏了一些细微的差异。
我的意思是无锁是“没有锁”,非阻塞更像是保证进度。我怀疑一个暗示另一个,但不是相反,我不确定。
欢迎参考。
【问题讨论】:
-
“非阻塞”可能是避免进度风险的最佳方式(甚至可能在内部涉及自旋锁和线程)。每个函数调用都会及时返回或返回部分工作(协同例程 yield、promise 或完成后的回调)。锁定是一种正确性策略,具有正确性风险和进度风险,例如在持有锁时死亡和amdahls-law。另一种非锁定正确性策略和调用交换属性(无锁结构、不可变)的进度策略可能是合适的。
标签: synchronization locking lock-free nonblocking