使用Interlocked.Exchange的状态变量的关键部分

时间:2017-07-25 15:24:31

标签: c# locking critical-section interlocked

我有一个关键部分,我试图在成员变量Interlocked.Exchange上使用int _state进行保护。这是代码:

if (Interlocked.Exchange(ref _state, 1) == 0)
{
    // *** Danger zone ***
    try
    {
         // Do something
    }
    finally
    {
         _state = 0;
    }
}

_state也在别处读取以确定状态,因此这是必需的。

我担心的是,如果在"危险区域"中发生异常,_state将永远不会被设置为0,并且永远不能再次输入临界区。

还有更好的方法可以设置状态变量吗?我应该使用双锁模式吗?

0 个答案:

没有答案