【发布时间】:2014-07-13 14:56:16
【问题描述】:
当我阅读 ReaderWriterLockSlim 锁定机制时,There was this guy 建议 Interlock 函数可用于更精细的锁定
另外,我发现here Marc 的另一个答案:
...写入对克隆副本进行更改,然后使用 Interlocked.CompareExchange 交换引用(重新应用他们的 如果另一个线程在此期间改变了引用,则更改)。
嗯,目前我对 Interlocked 对象的了解是,它用于(在多线程环境中)执行原子 additions、compare、compareExchange 操作。 (而且我知道怎么用)
但是(这是我的问题)——
问题
如何将它用作 锁 ? (示例代码将不胜感激)
编辑
为简单起见,我将粘贴此代码(这不是线程安全的 - 如果两个线程同时调用 Go,则可能会出现除零错误 ) :
class ThreadUnsafe
{
static int _val1 = 1, _val2 = 1;
static void Go()
{
if (_val2 != 0) Console.WriteLine (_val1 / _val2);
_val2 = 0;
}
}
如何使用 Interlock 来更换锁(这可以解决问题)?
【问题讨论】:
-
如何将其用作锁? - 使用
lock(){}。
标签: c# multithreading locking interlocked