2016-07-27 98 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操作。 –