[英]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.