1. 程式人生 > 實用技巧 >[C#]c#中資料的同步加鎖機制 的幾種方法

[C#]c#中資料的同步加鎖機制 的幾種方法

一,鎖定機制最簡單的做法就是使用鎖定關鍵字Lock。Lock關鍵字英文中就是鎖的意思,顧名思義就是為操作加上一把鎖。它的語法如下:

lock(lockObj)
{
//加鎖的程式碼段,一般是操作共同資源的程式碼
}

二、同步方法(synchronized)

案例程式碼:

usingSystem;

usingSystem.Runtime.CompilerServices;

namespaceApp4Thread
{
	classProgram
	{
		privatestaticintcount=0;
	privatestaticobjectmyMutex=newobject();
	
	[MethodImpl(MethodImplOptions.Synchronized)]
	publicstaticvoidMain()
	{
	count++;
	
	}
	}
	
}

[MethodImpl(MethodImplOptions.Synchronized)],該屬性在方法呼叫期間鎖定,阻止其他呼叫者呼叫。

名稱空間:System.Runtime.CompilerServices

程式集:mscorlib(mscorlib.dll 中)

功能:System.Runtime.CompilerServices名稱空間為編譯器編寫器提供使用託管程式碼在元資料中指定屬性。

c#中Monitor的使用

首先lock和Minitor有什麼區別呢? 其實lock在IL程式碼中會被翻譯成Monitor。也就是Monitor.Enter(obj)和Monitor.Exit(obj).
lock(obj)
{
}
等價為:
try
{
Monitor.Enter(obj)
}
catch()
{}
finally
{
Monitor.Exit(obj)
}
所以lock能做的,Monitor肯定能做,Monitor能做的,lock不一定能做。那麼Monitor額外的功能呢?

1:Monitor.TryEnter(obj,timespan)----timeout之後,就不執行這段程式碼了。lock可是一直會死等的。

2:還有Monitor.Wait()和Monitor.Pulse()。在lock程式碼裡面如果呼叫了Monitor.Wait(),會放棄對資源的所有權