Tôi có một loạt thuộc tính mà tôi sẽ sử dụng khóa đọc / ghi. Tôi có thể triển khai chúng bằng một try finally
hoặc một using
mệnh đề.
Trong try finally
tôi sẽ có được khóa trước try
và phát hành trong finally
. Trong using
mệnh đề này, tôi sẽ tạo một lớp có được khóa trong phương thức khởi tạo của nó và giải phóng trong phương thức Dispose của nó.
Tôi đang sử dụng khóa đọc / ghi ở nhiều nơi, vì vậy tôi đang tìm kiếm những cách có thể ngắn gọn hơn try finally
. Tôi muốn nghe một số ý kiến về lý do tại sao một cách có thể không được đề xuất hoặc tại sao cách này có thể tốt hơn cách khác.
Phương pháp 1 ( try finally
):
static ReaderWriterLock rwlMyLock_m = new ReaderWriterLock();
private DateTime dtMyDateTime_m
public DateTime MyDateTime
{
get
{
rwlMyLock_m .AcquireReaderLock(0);
try
{
return dtMyDateTime_m
}
finally
{
rwlMyLock_m .ReleaseReaderLock();
}
}
set
{
rwlMyLock_m .AcquireWriterLock(0);
try
{
dtMyDateTime_m = value;
}
finally
{
rwlMyLock_m .ReleaseWriterLock();
}
}
}
Phương pháp 2:
static ReaderWriterLock rwlMyLock_m = new ReaderWriterLock();
private DateTime dtMyDateTime_m
public DateTime MyDateTime
{
get
{
using (new ReadLock(rwlMyLock_m))
{
return dtMyDateTime_m;
}
}
set
{
using (new WriteLock(rwlMyLock_m))
{
dtMyDateTime_m = value;
}
}
}
public class ReadLock : IDisposable
{
private ReaderWriterLock rwl;
public ReadLock(ReaderWriterLock rwl)
{
this.rwl = rwl;
rwl.AcquireReaderLock(0);
}
public void Dispose()
{
rwl.ReleaseReaderLock();
}
}
public class WriteLock : IDisposable
{
private ReaderWriterLock rwl;
public WriteLock(ReaderWriterLock rwl)
{
this.rwl = rwl;
rwl.AcquireWriterLock(0);
}
public void Dispose()
{
rwl.ReleaseWriterLock();
}
}