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


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

 

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

二、同步方法(synchronized)

案例代碼:

using System;

using System.Runtime.CompilerServices;

namespace App4Thread
{
	class Program
	{
		private static int count = 0;
	    private static object myMutex = new object();
	    
	    [MethodImpl(MethodImplOptions.Synchronized)]
	    public static void Main()
	    {
	         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(),會放棄對資源的所有權

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM