Rất phổ biến khi sử dụng một đối tượng chỉ đọc tĩnh riêng tư để khóa trong đa luồng. Tôi hiểu rằng private làm giảm các điểm vào đối tượng khóa bằng cách thắt chặt việc đóng gói và do đó quyền truy cập vào những thứ cần thiết nhất.
Nhưng tại sao tĩnh?
private static readonly object Locker = new object();
Cuối cùng, trường chỉ được sử dụng trong lớp của tôi và tôi cũng có thể sử dụng trường này để thay thế:
private readonly object Locker = new object();
Có ý kiến gì không?
CẬP NHẬT:
Như một ví dụ, tôi đã dán mã này (chỉ là một ví dụ). Tôi có thể sử dụng khóa tĩnh hoặc không tĩnh trên điều này và cả hai sẽ hoạt động tốt. Xem xét câu trả lời dưới đây, tôi có nên xác định tủ đồ của mình như thế này không? (Xin lỗi, tôi có một cuộc phỏng vấn vào tuần tới và cần biết mọi chi tiết :)
private readonly object Locker = new object();
Và đây là mã:
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();
}
Cảm ơn
_service
và _waithandle
nằm ở đâu? ví dụ? tĩnh không? khác? Đó có thể , ví dụ, hãy cố ý đồng bộ hóa quyền truy cập vào một máy chủ từ xa ...