Nếu tôi có một cái gì đó như thế này (giả):C hoạt động # danh sách multithreaded
class A
{
List<SomeClass> list;
private void clearList()
{
list = new List<SomeClass>();
}
private void addElement()
{
list.Add(new SomeClass(...));
}
}
là nó có thể là tôi chạy vào các vấn đề đa luồng (hoặc bất kỳ loại hành vi bất ngờ) khi cả hai chức năng được thực hiện song song?
Trường hợp sử dụng là danh sách lỗi, có thể bị xóa bất kỳ lúc nào (bằng cách chỉ định một danh sách mới, trống).
EDIT: giả định của tôi là
- chỉ một thread thêm yếu tố
- yếu tố quên được ổn (tức là tình trạng chủng tộc giữa thanh toán bù trừ và thêm một yếu tố mới), miễn là hoạt động rõ ràng thành công mà không cần vấn đề
- NET 2,0
Chỉ có một chuỗi là thêm yếu tố, do đó, điểm thứ hai không phải là vấn đề đối với tôi. Và tôi đã nhận thức được điều kiện chủng tộc, nhưng điều đó không thực sự quan trọng đối với tôi - nhưng tôi không gọi 'Rõ ràng', thay vào đó tôi đang tạo một danh sách mới. Nó sẽ là một vấn đề để gọi 'Clear' và' Add' cùng một lúc (bạn nói 'List' không phải là thread-safe)? – AndiDog
Xin lỗi, tôi có nghĩa là AddElement và ClearList. Chỉ cần tạo một danh sách mới sẽ không sao, và nếu bạn chỉ thêm từ một chuỗi duy nhất nên được tất cả các quyền. Đừng quên rằng có thể có thêm các biến chứng khi bạn đang đọc từ danh sách quá - sẽ chỉ xảy ra trong cùng một chủ đề đó là làm Add? –
Không, một luồng GUI khác có thể lặp qua nó. Điều đó sẽ được thực hiện trong một vài tuần. Điều này có thể gây rắc rối nếu GUI sử dụng 'foreach (Element e trong instanceOfC.list) {...}' - nếu tôi gán một 'List' mới trong lần lặp này, GUI sẽ vẫn làm việc trên danh sách cũ, đúng không? – AndiDog