2016-07-27 88 views
-4

C#锁定和互锁之间有什么区别。 我的意思是他们如何在内部工作?锁定和互锁之间的区别

Interlocked.Add(ref Program._value, 1); 
+0

@Habib这不是完全相同的问题。另一个问题是“为了增加这个领域,应该采用哪种方法,为什么?”在这里,OP在询问“他们如何在内部工作?” - 这在那里根本没有解决。 –

+1

答案包含他要求的细节。因此,基本的互联网搜索:/ – Will

回答

-2

Interlocked类提供了原子操作,这意味着它们不会像锁一样阻止其他代码,因为它们并不需要。当你锁定一段代码时,你要确保同时没有2个线程,这意味着当一个线程在所有其他线程中等待进入时,它使用资源(cpu时间和空闲线程)。另一方面,原子操作不需要阻止其他原子操作,因为它们是原子操作。它在概念上是一个CPU操作,接下来的操作只会在前一个操作之后进行,并且不会在等待时浪费线程。 (顺便说一句,这就是为什么它仅限于像Increment,Exchange等非常基本的操作)

我认为一个锁(它是一个下面的Monitor)使用联锁来知道锁是否已被占用,但它可以'不知道里面的动作可能是原子的。

但在大多数情况下,差异并不重要。但是你需要验证你的具体情况。

+0

互锁方法是_m​​ade_原子。它们跨越多个CPU操作。 –