私は主にPOCOクラスとして設計されたクラスを持っており、さまざまなスレッドとタスクがその値を読み取ることができ、他の人だけがこれらの値をたまに更新するだけです。これは、ReaderWriterLockSlimにとって理想的なシナリオのようです。
問題は、クラスで、スレッドセーフである必要があるプロパティ、プロパティがブール値である場合、それはやり過ぎですか?それがintの場合はどうなりますか?日付時刻?
public class MyClass
{
private bool _theValue = false;
private ReaderWriterLockSlim _theValueLock = new ReaderWriterLockSlim();
public bool TheValue
{
get
{
bool returnVal = false;
try
{
_theValueLock.EnterReadLock();
returnVal = _theValue;
}
finally
{ _theValueLock.ExitReadLock(); }
return returnVal;
}
set
{
try
{
_theValueLock.EnterWriteLock();
_theValue = value;
}
finally
{ _theValueLock.ExitWriteLock(); }
}
}
}
このコードはすべてやり過ぎで、単純です...
public bool TheValue { get; set; }
...十分でしょうか?タイプはブール値なので安全ですか?もしそうなら、それはいつ安全でなくなるのですか?バイト?int?日付時刻?
編集
私の基本的なアーキテクチャは、このクラスストアの状態にすることです。たぶん、このクラスへの書き込みを担当するサービスが1つあります。他のすべてのクラスは、この状態データに基づいてロジックを読み取り、実行できます。私はすべてのデータが一貫していることを確認するために最善を尽くしますが、以下に述べるように、私の主な関心事はデータの原子性と分裂でした。
結論
皆さんの回答に感謝します。すべてが貴重でした。私の主な関心事は、書き込み/読み取りの原子性でした(つまり、スプリンチングについて心配していました)。.NETプラットフォームの場合、問題の変数が4バイト未満の組み込み値型である場合、読み取りと書き込みはアトミックです(たとえば、shortとintは問題ありませんが、longとdoubleは問題ありません)。