Tôi đang cố gắng sử dụng ThreadPool.RegisterWaitForSingleObject để thêm bộ hẹn giờ vào một tập hợp chủ đề. Tôi tạo ra 9 chủ đề và đang cố gắng để cung cấp cho mỗi người trong số họ một cơ hội bình đẳng của hoạt động như tại thời điểm này có vẻ là một chút đói xảy ra nếu tôi chỉ cần thêm chúng vào hồ bơi thread. Tôi cũng đang cố gắng triển khai một sự kiện đặt lại thủ công vì tôi muốn tất cả 9 chủ đề thoát ra trước khi tiếp tục.Cách chính xác để thực hiện ThreadPool.RegisterWaitForSingleObject
Cách tốt nhất để đảm bảo rằng mỗi chuỗi trong threadpool có cơ hội bình đẳng khi chạy như hàm mà tôi đang gọi có vòng lặp và dường như mỗi luồng (hoặc bất kỳ cái nào chạy trước) bị kẹt trong đó và những người khác không có cơ hội để chạy.
resetEvents = new ManualResetEvent[table_seats];
//Spawn 9 threads
for (int i = 0; i < table_seats; i++)
{
resetEvents[i] = new ManualResetEvent(false);
//AutoResetEvent ev = new AutoResetEvent(false);
RegisteredWaitHandle handle = ThreadPool.RegisterWaitForSingleObject(autoEvent, ObserveSeat, (object)i, 100, false);
}
//wait for threads to exit
WaitHandle.WaitAll(resetEvents);
Tuy nhiên, việc sử dụng resetEvents [] hoặc ev dường như không hoạt động bình thường cũng không thành vấn đề. Tôi có thể thực hiện điều này hay là tôi (có thể) hiểu lầm cách họ nên làm việc.
Xin cảm ơn, R.
Cảm ơn, tôi chưa có thời gian để kiểm tra điều này nhưng cảm ơn Brian vì câu trả lời. – flavour404