Giả sử tôi có một mô-đun có Hàng đợi trong đó..NET - Thread thread Queue.Enqueue có an toàn không?
Đối với các đơn vị khác để Enqueue, họ phải trải qua một chức năng:
public sub InsertIntoQueue(Obj)
MyQueue.Enqueue(Obj)
end sub
Nếu tôi đã nhiều luồng chạy và họ muốn gọi InsertIntoQueue(), là coi chủ đề này an toàn không?
Tôi đang trong ấn tượng rằng chỉ có một bản sao của các lệnh trong bộ nhớ cần thiết để thực hiện hàm InsertIntoQueue() ... điều này sẽ khiến tôi nghĩ rằng đây là luồng an toàn.
Tuy nhiên, tôi tự hỏi điều gì sẽ xảy ra khi hai chủ đề cố gắng chạy hàm cùng một lúc?
Chủ đề này có an toàn không và nếu không, làm thế nào tôi có thể làm cho chuỗi này an toàn? (và Điều gì sẽ là tác động hiệu quả liên quan đến tốc độ và sử dụng bộ nhớ)
Kế hoạch của tôi là có nhiều chủ đề Enqueuing, và một sợi chỉ khóa và xả toàn bộ hàng đợi tại các khoảng nhất định. –
nếu bạn khóa trong khi bạn xử lý tất cả các đối tượng trong hàng đợi, tất cả các chủ đề được enqueuing sẽ được chặn (nếu họ cố gắng để enqueue) cho đến khi dequeue thread của bạn đã hoàn thành, bạn có thể tốt hơn để khóa chỉ kiểm tra trống và dequeue của mỗi đối tượng thay vì xử lý toàn bộ hàng đợi. – Matt