Dot-Net

當程式碼在多台機器上執行時,用什麼來代替“lock”語句?

  • January 4, 2012

lock語句確保一個執行緒不進入程式碼的臨界區,而另一個執行緒在臨界區。但是,如果工作負載分佈在一組伺服器(例如幾個 IIS 伺服器 + 一個負載平衡器)上,它就不會起作用。

.NET 是否支持這種情況?

是否有任何類可用於控制多台機器上執行的執行緒對關鍵程式碼部分的執行?

如果沒有,是否有處理此類問題的標準方法?

這個問題的靈感來自於從此處開始但不限於 SharePoint 或 ASP.NET 的討論。

如果您有權訪問集中式 SQL Server 實例,則可以將其用作分佈式鎖協調器並使用sp_getapplocksp_releaseapplock儲存過程管理應用程序鎖。

SQL Server 2005 中的應用程序鎖(或互斥鎖)

lock語句僅對在程序內共享資源有用。

MutexEventWaitHandle類在使用以"Global\".

除此之外,您還必須在 .NET 之外實現一些東西,例如在共享 SQL 數據庫上使用sp_getapplock/ 。sp_releaseapplock

引用自:https://stackoverflow.com/questions/8189439