我有一个关键部分,我试图在成员变量Interlocked.Exchange
上使用int _state
进行保护。这是代码:
if (Interlocked.Exchange(ref _state, 1) == 0)
{
// *** Danger zone ***
try
{
// Do something
}
finally
{
_state = 0;
}
}
_state
也在别处读取以确定状态,因此这是必需的。
我担心的是,如果在"危险区域"中发生异常,_state
将永远不会被设置为0,并且永远不能再次输入临界区。
还有更好的方法可以设置状态变量吗?我应该使用双锁模式吗?