vto*_*ola 10 .net c# multithreading synchronization volatile
由于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
提前致谢.
Moo*_*ice 13
正是.
但是,你有另一种选择.将时间存储为Int64滴答计数,并用于InterlockedExchange设置.然后,线程可以DateTime使用Int64构造函数构造自己的线程,不会产生争用,也不会产生锁定.
编辑:
鉴于您提供了更多信息,现在提供示例更容易.
public class Cache
{
class CacheEntry
{
private Int64 m_Touched;
public CacheEntry()
{
Touch();
}
public void Touch()
{
System.Threading.Interlocked.Exchange(ref m_Touched, DateTime.Now.Ticks);
}
public DateTime Touched
{
get
{
return new DateTime(Interlocked.Read(ref m_Touched));
}
}
} // eo class CacheEntry
} // eo class Cache
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6007 次 |
| 最近记录: |