我的一个类具有 Guid 类型的属性。该属性可以由多个线程同时读取和写入。我的印象是对 Guid 的读写不是原子的,因此我应该锁定它们。
我选择这样做:
public Guid TestKey
{
get
{
lock (_testKeyLock)
{
return _testKey;
}
}
set
{
lock (_testKeyLock)
{
_testKey = value;
}
}
}
(在我的班级中,对 Guid 的所有访问也是通过该属性完成的,而不是直接访问 _testKey。)
我有两个问题:
(1)真的有必要像那样锁定Guid以防止读取撕裂吗?(我很确定它是。)
(2)这是一种合理的锁定方式吗?还是我需要这样做:
get
{
Guid result;
lock (_testKeyLock)
{
result = _testKey;
}
return result;
}
[编辑] 这篇文章确实证实了 Guids 会受到撕裂的影响:http: //msdn.microsoft.com/en-us/magazine/jj863136.aspx