[C#]c#中資料的同步加鎖機制 的幾種方法
阿新 • • 發佈:2020-12-05
一,鎖定機制最簡單的做法就是使用鎖定關鍵字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(),會放棄對資源的所有權