私のクラスの1つには、Guidタイプのプロパティがあります。このプロパティは、複数のスレッドで同時に読み取りと書き込みを行うことができます。Guidへの読み取りと書き込みはアトミックではないという印象を受けているので、それらをロックする必要があります。
私はこのようにすることを選択しました:
public Guid TestKey
{
get
{
lock (_testKeyLock)
{
return _testKey;
}
}
set
{
lock (_testKeyLock)
{
_testKey = value;
}
}
}
(私のクラス内では、Guidへのすべてのアクセスも、_testKeyに直接アクセスするのではなく、そのプロパティを介して行われます。)
2つの質問があります:
(1)読み取りの破損を防ぐために、そのようにGUIDをロックする必要が本当にありますか?(確かにそうです。)
(2)それはロックを行うための合理的な方法ですか?または、次のようにする必要がありますか?
get
{
Guid result;
lock (_testKeyLock)
{
result = _testKey;
}
return result;
}
[編集]この記事は、Guidsが読み取りの破損に苦しむことを確認しています:http://msdn.microsoft.com/en-us/magazine/jj863136.aspx