[英]How to avoid locking when using a static object
我有一個C#桌面應用程序。
在我的代碼中,我正在從相機獲取圖像。 我將此圖像傳遞給例程。
這是我的代碼的“語法”:
//in a routine
if (!isProcessingMotion)
{
try
{
isProcessingMotion = true;
//do stuff
}
finally
{
isProcessingMotion = false;
}
}
//////
//module variable:
private static bool isProcessingMotion = false;
從父代碼引發事件時,將達到該功能。
問題是'isProcessingMotion = false並不總是'hit'。 我在整個代碼中都進行了嘗試捕獲,但是沒有錯誤。
我不想使用監視程序或鎖定(“只讀靜態對象”),因為當我執行該應用程序時,它會緩慢運行。
我應該注意什么?
我想發生的事情不是不是未到達finally塊,而是在執行了finally塊之后,另一個線程可能正在更改isProcessingMotion變量。 當觸發第二個事件,但是第一個事件尚未完成對第一個請求的處理時,可能會發生這種情況。
似乎一次訪問您的字段有多個權限。 盡管您不希望使用鎖,但這似乎是解決問題的完美方法。 要么這樣做,要么您必須更改應用程序邏輯以不對同一變量進行多次讀取。
由於您必須按順序處理它們,因此我絕對會鎖定:
var processingLock = new object();
if (!isProcessingMotion)
{
lock (processingLock)
{
isProcessingMotion = true;
// Do stuff..
isProcessingMotion = false;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.