Tôi đang tìm một hàng đợi ưu tiên được triển khai trong Delphi sẽ hoạt động tốt trong môi trường nhiều luồng.Hàng đợi ưu tiên an toàn cho Delphi?
Lý tưởng không khóa hoặc được thiết kế để chèn/xóa nhiều luồng với thứ gì đó tốt hơn so với trình bao bọc bị khóa xung quanh việc triển khai một luồng (mà tôi đã có).
Tính đặc hiệu là trong hoạt động bình thường, sẽ chỉ có thêm, xóa và thông báo khi thay đổi trên cùng (mục có mức ưu tiên cao nhất) trong khi hoạt động "pop" của mục có mức độ ưu tiên cao nhất sẽ rất hiếm khi xảy ra.
Nó sẽ được sử dụng cho một nhiệm vụ giám sát chuỗi thời gian chờ/giám sát, được thực hiện trong các chủ đề khác, nhiệm vụ đó được dự kiến sẽ chấm dứt bình thường hầu hết thời gian, vì vậy chúng sẽ được thêm/xóa khỏi hàng đợi. Chuỗi thời gian chờ về cơ bản sẽ chờ trong sự kiện thời gian chờ tiếp theo, do đó cần thông báo khi sự kiện ưu tiên hàng đầu thay đổi.
Các tác vụ được xử lý bởi tập lệnh, có thể được chấm dứt an toàn bất kỳ lúc nào.
Nếu có thuật toán tốt hơn cho hàng này so với hàng đợi ưu tiên, chúng cũng có thể là câu trả lời hay!
Chỉnh sửa: sau một nhận xét của Martin James, một đặc trưng khác là có tương đối ít giá trị thời gian chờ khác nhau và cho mỗi giá trị hết giờ, sự cố sẽ trở thành hàng đợi FIFO.
Tại sao "trình bao bọc bị khóa xung quanh triển khai một luồng" không đủ tốt cho tác vụ này? – Pol
Những hạn chế về hiệu năng làm cho giải pháp dựa trên khóa không phù hợp là gì? –
@ Pol: Nó không đủ tốt vì tôi đã có một (như đã nói trong bài viết) –