C#锁内部实现
本文关键字:实现 内部 | 更新日期: 2024-07-23 01:15:47
我知道现在在C#
中,lock
是这样实现的:
bool lockWasTaken = false;
var temp = obj;
try
{
Monitor.Enter(temp, ref lockWasTaken);
{
//body
}
}
finally
{
if (lockWasTaken)
{
Monitor.Exit(temp);
}
}
为什么我们需要这个:var temp = obj;
?
Simple,如果在调用Monitor.Enter
之后和Monitor.Exit
之前更改了变量,该怎么办?
为了防止它占用变量的副本。即使您也可以在lock
语句中将值设置为null
,但它仍然可以确保释放之前获取的锁。
因为obj
可能在锁代码的主体中被重新分配,并且您所显示的代码必须确保它在调用Enter
的对象上调用Exit
。