无锁和无阻塞有什么区别?

Gio*_*hal 3 synchronization locking nonblocking lock-free

在数据结构同步的背景下,有人可以澄清"无锁"和"非阻塞"之间的区别吗?这些术语似乎可以被很多人互换使用,但我还不确定某个地方是否隐藏着一些微妙的差异.

我的意思是无锁是"没有锁",非阻塞更像是保证进步.我怀疑一个暗示另一个而不是相反,我不确定.

参考文献欢迎.

Viv*_*rma 6

锁定是一种访问控制机制.因此,我指的是当您想要对其进行独占访问时锁定资源.锁门,使用房间/做任何你想做的事情,现在为其他人解锁房间,以便他们现在可以使用它.当房间被锁定时,没有其他人可以进入房间,因此无法做任何事情.

阻止用于保证数据检索,除非你没有数据,否则不要回来.继续等待门/管道/插座(基本上是任何东西),当数据可用时,获取并返回.

添加 -
不要被单词的字面英语含义混淆,因为它们都可以在你试图将它们放入的上下文中交替使用.例如 - 锁定就像阻止其他人使用它们一样资源和阻塞可以锁定自己(调用函数)到资源,直到数据可用.

因此,LOCKING只是意味着您在指定的时间内捕获资源(除非您取消阻止它).并且,BLOCKING是您被阻止,这意味着您无法继续进行,因为您没有数据,继续或继续.

它们的实现方式,通过更改进程的状态,以及等待中断或事件发生.