Дуже часто застосовувати приватний статичний об'єкт для читання лише для блокування в декількох нитках. Я розумію, що приватне зменшує вхідні точки до блокуючого об'єкта, затягуючи капсуляцію і, отже, доступ до найважливішого.
Але чому статичний?
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
розташовані? екземпляр? статичний? інший? Це може , наприклад, бути навмисно синхронізації доступу до віддаленого сервера ...