È molto comune utilizzare un oggetto di sola lettura statico privato per il blocco nel multi threading. Capisco che privato riduce i punti di ingresso all'oggetto di blocco stringendo l'incapsulamento e quindi l'accesso al più essenziale.
Ma perché statico?
private static readonly object Locker = new object();
Alla fine il campo viene utilizzato solo all'interno della mia classe, e potrei anche usare solo questo:
private readonly object Locker = new object();
Eventuali commenti?
AGGIORNARE:
Come esempio ho incollato questo codice (solo un esempio). Potrei usare un armadietto statico o non statico su questo ed entrambi funzionerebbero bene. Considerando la risposta di seguito, dovrei piuttosto definire il mio armadietto in questo modo? (Scusa, ho un colloquio la prossima settimana e ho bisogno di conoscere ogni dettaglio :)
private readonly object Locker = new object();
Ed ecco il codice:
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();
}
Grazie
_service
e si _waithandle
trovano? esempio? statico? altro? Ciò potrebbe , ad esempio, sincronizzare deliberatamente l'accesso a un server remoto ...