由于DateTime不能声明为volatile,这是对的吗?:
private DateTime _time;
public DateTime Time
{
get
{
Thread.MemoryBarrier();
return _time;
}
set
{
_time = value;
Thread.MemoryBarrier();
}
}
Run Code Online (Sandbox Code Playgroud)
该属性可以从不同的线程访问,所以我想确保它们始终获得最新版本,而不使用争用(锁定).
编辑:
我想确保当"删除线程"进入集合时,所有项目都有最新的"最后访问"DateTime,因此我可以避免再次创建项目,因为缓存保持该值几毫秒:d
提前致谢.
我经常看到这里显示的代码,即分配对象的位置,然后用作"锁定对象".
在我看来,你可以使用任何对象,包括事件本身作为锁对象.为什么要分配一个什么都不做的新对象?我的理解是在对象上调用lock()实际上不会改变对象本身,也不会实际锁定它被使用,它只是用作多个锁定语句锚定的占位符.
public class Shape : IDrawingObject, IShape
{
// Create an event for each interface event
event EventHandler PreDrawEvent;
event EventHandler PostDrawEvent;
object objectLock = new Object();
// Explicit interface implementation required.
// Associate IDrawingObject's event with
// PreDrawEvent
event EventHandler IDrawingObject.OnDraw
{
add
{
lock (objectLock)
{
PreDrawEvent += value;
}
}
remove
{
lock (objectLock)
{
PreDrawEvent -= value;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
所以我的问题是,这真的是一件好事吗?