Tôi có đoạn mã sau đây:Lợi nhuận có đạt được trong C# thread-safe không?
private Dictionary<object, object> items = new Dictionary<object, object>;
public IEnumerable<object> Keys
{
get
{
foreach (object key in items.Keys)
{
yield return key;
}
}
}
Chủ đề này có an toàn không? Nếu không, tôi phải đặt lock
quanh vòng lặp hoặc yield return
?
Dưới đây là những gì tôi có nghĩa là:
thread1 truy cập vào Keys
tài sản trong khi thread2 thêm một mục vào từ điển cơ bản. Thread1 có bị ảnh hưởng bởi việc thêm Thread2 không?
dụ thứ hai của bạn sẽ khóa, trả lại một đếm được sau đó mở khóa. Và bạn sẽ lặp lại SAU KHI mở khóa. – Guillaume
Ồ, bạn nói đúng. Tôi chỉ nhận thấy đó là một ví dụ xấu. Tôi sẽ chỉnh sửa câu hỏi. – Albic
Chỉ để làm sáng tỏ một chút: Chủ đề an toàn thông qua khóa là tốn kém, do đó, nó không có ý nghĩa để tự động khóa trên mọi hành động trừ khi bạn yêu cầu một cách rõ ràng. –