เป็นเรื่องปกติมากที่จะใช้ออบเจ็กต์แบบอ่านอย่างเดียวแบบคงที่ส่วนตัวสำหรับการล็อกแบบมัลติเธรด ฉันเข้าใจว่าไพรเวตลดจุดเข้าสู่วัตถุล็อคโดยการทำให้การห่อหุ้มแน่นขึ้นและดังนั้นการเข้าถึงสิ่งที่สำคัญที่สุด
แต่ทำไมคง?
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
อยู่ที่ไหน? ตัวอย่าง? คงที่? อื่น ๆ ? ที่สามารถยกตัวอย่างเช่นจะจงใจตรงกันเข้าถึงเซิร์ฟเวอร์ระยะไกล ...