Ví dụ là đoạn mã sau chủ đề an toàn:Các hoạt động LINQ trên chuỗi bộ sưu tập đồng thời có an toàn không?
ConcurrentQueue<Guid> _queue = new ConcurrentQueue<Guid>();
while(true)
{
for(int y = 0; y < 3; y++)
{
if(y % 3 == 0)
{
System.Threading.Tasks.Task.Run(() => _queue.Enqueue(Guid.NewGuid()));
}
else if (y % 3 == 1)
{
Guid x;
System.Threading.Tasks.Task.Run(() => _queue.TryDequeue(out x));
}
else if(y % 3 == 2)
{
System.Threading.Tasks.Task.Run(() =>
{
if (_queue.Any(t => t == testGuid))
{
// Do something
}
});
}
}
Chỉnh sửa: Rõ ràng danh hiệu là không đủ rõ ràng để cập nhật các mẫu mã để bao gồm hành vi luồng đa thực tế, có những mã trên chỉ là một mẫu của hành vi đa luồng.
Chủ đề ở đâu? – leppie
Bạn có thể có điều này trong một ứng dụng asp.net và nhiều chủ đề sẽ truy cập nó mà không cần bạn tạo chúng bằng tay – pollirrata
Không có luồng đa trong mã của bạn nhưng nếu bạn đang ở trong môi trường đa luồng, ConcurrentQueue chắc chắn là loại tốt để sử dụng vì nó cung cấp truy cập an toàn vào hàng đợi của bạn .. – FloChanz