我有一個方法應該以獨家方式執行。基本上,這是一個多線程應用程序,其中該方法由定時器定期調用,但也可以由用戶操作手動觸發。如何在多線程上下文中獨佔方法?
讓我們舉個例子:
的定時器結束,因此該方法是 調用。該任務可能需要幾秒鐘的時間。
之後,用戶點擊一些 按鈕,這應該會觸發 相同的任務:BAM。由於該方法已在運行,因此它不執行任何操作 。
我用以下解決方案:
public void DoRecurentJob()
{
if(!Monitor.TryEnter(this.lockObject))
{
return;
}
try
{
// Do work
}
finally
{
Monitor.Exit(this.lockObject);
}
}
凡lockObject
聲明那樣:
private readonly object lockObject = new object();
編輯:將有哪些持有該對象的只有一個實例方法,所以我將鎖對象更新爲非靜態的。
有沒有更好的方法來做到這一點?或者,也許這是一個錯誤的任何理由?
注意的是互斥使用內核資源重量級的對象,如果你需要輸入鎖跨進程的工作應僅使用。顯示器更輕更快。在'Accelerated C#2008'中,Trey Nash寫道:「一個簡單的測試表明,使用Mutex的時間比Monitor類長34倍。」 – 2008-09-29 20:24:17
優化速度聽起來非常不成熟。 – bzlm 2008-10-01 11:50:09