マルチスレッドでのロックには、プライベートな静的な読み取り専用オブジェクトを使用することが非常に一般的です。privateは、カプセル化を強化することでロックオブジェクトへのエントリポイントを減らし、したがって最も重要なものへのアクセスを減らすことを理解しています。
しかし、なぜ静的なのでしょうか?
private static readonly object Locker = new object();
最後にフィールドは私のクラス内でのみ使用され、代わりにこれを使用することもできます:
private readonly object Locker = new object();
コメントは?
更新:
例として、このコードを貼り付けました(単なる例)。私はこれに静的または非静的ロッカーを使用することができ、どちらも正常に動作します。以下の答えを考えると、このようにロッカーを定義する必要がありますか?(申し訳ありませんが、来週インタビューがあります。すべての詳細を知る必要があります:)
private readonly object Locker = new object();
そしてここにコードがあります:
private int _priceA;
private int _priceB;
private EventWaitHandle[] _waithandle;
private readonly IService _service;
//ctor
public ModuleAViewModel(IService service)
{
_service = service;
_modelA = new ModelA();
_waithandle = new ManualResetEvent[2];
_waithandle[0] = new ManualResetEvent(false);
_waithandle[1] = new ManualResetEvent(false);
LoadDataByThread();
}
private void LoadDataByThread()
{
new Thread(() =>
{
new Thread(() =>
{
lock (Locker)
{
_priceA = _service.GetPriceA();
}
_waithandle[0].Set();
}).Start();
new Thread(() =>
{
lock (Locker)
{
_priceB = _service.GetPriceB();
}
_waithandle[1].Set();
}).Start();
WaitHandle.WaitAll(_waithandle);
PriceA = _priceA;
PriceB = _priceB;
}).Start();
}
ありがとう
_service
、どこにあり_waithandle
ますか?インスタンス?静的?その他?これは、たとえば、リモートサーバーへのアクセスを意図的に同期させている可能性があります...