Tôi có một hàm trả về một mục nhập trên một từ điển, dựa trên Khóa (tên) và nếu nó không tồn tại, trả về một từ mới được tạo.Khóa từ điển trong cùng một chủ đề
Câu hỏi tôi có là "khóa kép": SomeFunction khóa _dictionary, để kiểm tra sự tồn tại của khóa, sau đó gọi một hàm cũng khóa cùng một từ điển, có vẻ như hoạt động nhưng tôi không chắc chắn nếu có một vấn đề tiềm năng với phương pháp này.
public Machine SomeFunction(string name)
{
lock (_dictionary)
{
if (!_dictionary.ContainsKey(name))
return CreateMachine(name);
return _dictionary[name];
}
}
private Machine CreateMachine(string name)
{
MachineSetup ms = new Machine(name);
lock(_dictionary)
{
_ictionary.Add(name, ms);
}
return vm;
}
Tôi nghĩ bạn hiểu lầm về việc khóa nào. Khóa ** chặn tất cả các chuỗi khác truy cập vào vùng mã được bảo vệ **. Nó không liên quan gì tới luồng * hiện tại *. Bạn có thể lấy ra một khóa một ngàn lần trên cùng một vật thể trên cùng một sợi, không thành vấn đề; mỗi khu vực mã bị khóa do đó sẽ được bảo vệ khỏi truy cập bởi các chủ đề khác. –
Nếu bạn đang tìm kiếm "khóa cùng một luồng", hãy xem lớp [Semaphore] (http://msdn.microsoft.com/en-us/library/system.threading.semaphore.aspx). – ANeves