提供以下课程:
public class LockfreeThing
{
public DateTimeOffset? When { get; private set; }
public void Work(DateTimeOffset? someOffset)
{
var copy = When;
if (copy.HasValue)
{
if (copy > someOffset)
{
// Use copy safely
}
else
{
When = null;
}
}
When = someOffset;
}
}
根据此SO answer,由于When
支持字段为struct
,此处的引用分配不是线程安全的。
忽略var copy = When
可能读取CPU缓存并缺少最新值的可能性,是否可以使这些代码无锁且线程安全?
答案 0 :(得分:0)