Sangat umum menggunakan objek hanya baca statis privat untuk mengunci multi threading. Saya memahami bahwa privat mengurangi titik masuk ke objek penguncian dengan memperketat enkapsulasi dan karena itu akses ke yang paling penting.
Tapi kenapa statis?
private static readonly object Locker = new object();
Pada akhirnya, bidang ini hanya digunakan di dalam kelas saya saja, dan saya juga bisa menggunakan ini sebagai gantinya:
private readonly object Locker = new object();
Ada komentar?
MEMPERBARUI:
Sebagai contoh saya telah menempelkan kode ini (hanya contoh). Saya bisa menggunakan loker statis atau non-statis untuk ini dan keduanya akan berfungsi dengan baik. Mempertimbangkan jawaban di bawah ini, saya harus mendefinisikan loker saya seperti ini? (Maaf saya ada wawancara minggu depan dan perlu tahu setiap detail :)
private readonly object Locker = new object();
Dan inilah kodenya:
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();
}
Terima kasih
_service
dan _waithandle
berada? contoh? statis? lain? Itu bisa , misalnya, dengan sengaja menyinkronkan akses ke server jarak jauh ...