繁体   English   中英

使用静态对象时如何避免锁定

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM