Parallel processing 以下算法是无锁的吗?

Parallel processing 以下算法是无锁的吗?,parallel-processing,lock-free,locks,Parallel Processing,Lock Free,Locks,在我的理解中,如果某个线程总是取得进展,那么算法是无锁的 下面的示例(使用锁)不满足此条件吗 线程1:对关键部分使用锁1 线程2:对关键部分使用锁1 线程3:有些调用独立于lock1,而其他两个线程通常都是独立的您所描述的显然不是任何意义上的“无锁”。线程1和线程2依赖于相同的共享资源(一个关键部分,由“lock1”强制),因此如果其中一个线程获取了该锁,然后挂起,那么另一个线程将在等待该锁时死锁 当然,线程3将继续运行,但线程A、B和C(即与程序无关的线程)也将继续运行。当把算法作为一个整体来

在我的理解中,如果某个线程总是取得进展,那么算法是无锁的

下面的示例(使用锁)不满足此条件吗

线程1:对关键部分使用锁1
线程2:对关键部分使用锁1

线程3:有些调用独立于lock1,而其他两个线程通常都是独立的

您所描述的显然不是任何意义上的“无锁”。线程1和线程2依赖于相同的共享资源(一个关键部分,由“lock1”强制),因此如果其中一个线程获取了该锁,然后挂起,那么另一个线程将在等待该锁时死锁

当然,线程3将继续运行,但线程A、B和C(即与程序无关的线程)也将继续运行。当把算法作为一个整体来看时,这似乎是不相关的,这个整体大概由所有三个线程组成

本质上,“无锁”的定义的问题在于它不够精确。你说一个算法是无锁的“如果某个线程总是取得进展”,但是你没有把算法看作一个整体

线程3基本上是无锁的(因为它在没有任何其他线程帮助的情况下自行取得进展),但您的整个算法不是

评估算法是否无锁的更好方法是问问自己:如果一个线程被挂起,这会阻止其他线程作为一个组取得进展吗?在这种情况下,是的。如果线程1或线程2获取了锁,然后挂起,这将阻止另一个线程执行,并且这些线程可能正在执行对算法很重要的工作

我推荐。下面是该博客文章中的一个方便的流程图:


“为cs使用锁1”← 这是什么意思?什么是“锁1”,什么是“cs”?对不起,让我具体说明一下:锁1是某种表示互斥的锁。cs是一个可能永远不会终止的关键部分,这使得死锁成为可能。谢谢你,我认为关键的一点是我需要如何在整个算法上应用进度标准。你链接的博客文章也很好。