Il est très fréquent d'utiliser un private static readonly objet de blocage dans les multi-threading. Je comprends que privé réduit les points d'entrée pour le verrouillage de l'objet par un resserrement de l'encapsulation et, par conséquent, l'accès à l'essentiel.
Mais pourquoi statique?
private static readonly object Locker = new object();
À la fin du champ est utilisé uniquement dans ma classe seulement, et j'aurais aussi pu utiliser ceci à la place:
private readonly object Locker = new object();
Tous les commentaires?
Mise à JOUR:
Comme un exemple, j'ai collé ce code (juste un exemple). Je pourrais utiliser statique ou non statique locker sur cette question et les deux fonctionnent très bien. Compte tenu de la réponse ci-dessous, je devrais être plutôt la définition de mon armoire comme ça? (Désolé, j'ai un entretien la semaine prochaine et le besoin de connaître tous les détails :)
private readonly object Locker = new object();
Et voici le code:
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();
}
Merci