问题:
PS:UI线程更新IsMouseInside。另一个线程有时会读取它的值
public Class Test
{
private readonly object isMouseInsideLocker = new object();
private bool isMouseInside = false;
public bool IsMouseInside
{
get
{
bool copy;
lock (this.isMouseInsideLocker)
copy = this.isMouseInside;
return copy;
}
set
{
lock (this.isMouseInsideLocker)
this.isMouseInside = value;
}
}
private void lblProcessTime_MouseEnter(object sender, EventArgs e)
{
IsMouseInside = true;
}
private void lblProcessTime_MouseLeave(object sender, EventArgs e)
{
IsMouseInside = false;
}
}
答案 0 :(得分:3)
return isMouseInside;
答案 1 :(得分:2)
不,不能死锁;只有一个锁定对象,并且不存在允许您在保持锁定时执行某些操作的扩展点。但是,如果您使用锁定,则应该清楚地说明您要避免使用哪些方案。虽然含义实际上非常微妙,但我想知道volatile
是否可以在这里工作而不需要任何锁定。或Interlocked
上的int
始终为0
或1
。
但是可以肯定的是,看起来它会起作用;无论如何bool始终是原子的,所以这里的锁只是作为一个内存屏障避免缓存问题(因此volatile也可能起作用)。请记住,无论何时获得该值,现在都已过时并且可能已经不正确。但是在阅读时确实如此。
答案 2 :(得分:1)
目标是什么?
答案 3 :(得分:0)