tôi vẫn đang bối rối ... Khi chúng tôi viết một số điều như thế này:Khóa() {} khóa tài nguyên, hay nó khóa một đoạn mã?
Object o = new Object();
var resource = new Dictionary<int , SomeclassReference>();
... và có hai khối mã khóa o
khi truy cập resource
...
//Code one
lock(o)
{
// read from resource
}
//Code two
lock(o)
{
// write to resource
}
Bây giờ, nếu tôi có hai chủ đề, với một chuỗi thực thi luồng mà đọc từ resource
và một văn bản khác, tôi muốn khóa resource
sao cho khi nó được đọc, người viết sẽ phải đợi (và ngược lại - nếu nó đang được viết, độc giả sẽ phải đợi). Cấu trúc khóa có giúp tôi không? ... hay tôi nên sử dụng cái gì khác?
(Tôi đang sử dụng Dictionary
cho các mục đích của ví dụ này, nhưng có thể là bất cứ điều gì)
Có hai trường hợp tôi đặc biệt quan tâm đến:
- hai luồng cố gắng để thực hiện cùng một dòng mã
- hai luồng cố gắng làm việc trên cùng một tài nguyên
Will lock
giúp đỡ trong cả hai điều kiện?
@SilverHorse: xin lỗi vì đã dẫm lên bản chỉnh sửa của bạn - hãy quay lại để thêm thẻ và không nhận ra bạn đã chỉnh sửa trong khi đó! – Shog9