Tôi có một tình huống trong C# nơi tôi có một danh sách các loại đơn giản. Danh sách này có thể được truy cập bởi nhiều chủ đề: các mục có thể được thêm vào hoặc loại bỏ, và sự tồn tại của một mục có thể được kiểm tra. Tôi đã đóng gói danh sách trong một đối tượng phơi bày chỉ ba hoạt động này cho đến nay.C# Danh sách câu hỏi đồng thời
Tôi có một vài trường hợp để xử lý (không chính xác giống như các phương pháp tôi vừa đề cập).
1. Chủ đề chỉ có thể kiểm tra sự tồn tại của mục nhập. (đơn giản)
2. Chủ đề có thể kiểm tra sự tồn tại của một mục nhập và nếu nó không tồn tại, hãy thêm nó.
3. Chủ đề cần kiểm tra xem có tồn tại một mục hay không và nếu có, hãy chờ cho đến khi nó được gỡ bỏ.
4. Một sự kết hợp của 2 và 3, trong đó một chủ đề kiểm tra sự tồn tại của một mục, nếu nó tồn tại, nó phải đợi cho đến khi nó được gỡ bỏ trước khi nó có thể tự thêm nó.
Toàn bộ ý tưởng là sự tồn tại của một mục có nghĩa là một khóa. Nếu một mục nhập tồn tại, đối tượng mà nó xác định không thể thay đổi và mã không thể tiến hành vì nó đang được sửa đổi ở nơi khác.
Đây có thể là những tình huống mới làm quen đơn giản nhưng tôi làm mới bản thân về các vấn đề tương tranh và nó khiến tôi hơi hoang tưởng, và tôi cũng không quen thuộc với các cơ chế đồng thời của C#.
Cách tốt nhất để xử lý việc này là gì? Tôi hoàn toàn tắt? Nên kiểm tra và thêm (thử nghiệm và thiết lập?) Được kết hợp thành một hoạt động nguyên tử thứ tư? Tôi chỉ đơn giản là sẽ thêm khối khóa vào phương pháp của tôi, nơi danh sách được truy cập?
Ngoài ra, có thể kiểm tra đơn vị loại điều này (không phải là thao tác đơn giản, tình huống đồng thời) không?
+1, tôi đi đến một giải pháp tương tự nhưng HashSet làm cho nó hiệu quả hơn. Bản demo đẹp cho lớp Monitor, sử dụng khóa lồng nhau vv. Chỉ có vấn đề có thể là một 'stampede' khi một mục bị xóa. –