Я пытаюсь использовать ThreadPool.RegisterWaitForSingleObject, чтобы добавить таймер к набору потоков. Я создаю 9 потоков и пытаюсь дать каждому из них равный шанс на работу, поскольку на данный момент, похоже, происходит небольшое голодание, если я просто добавляю их в пул потоков. Я также пытаюсь выполнить событие ручного сброса, поскольку я хочу, чтобы все 9 потоков выходили, прежде чем продолжить.Правильный способ реализации ThreadPool.RegisterWaitForSingleObject
Каков наилучший способ гарантировать, что каждый поток в threadpool получает равный шанс при запуске, поскольку функция, которую я вызываю, имеет цикл, и кажется, что каждый поток (или каждый из них запускается первым) застревает в нем и у других нет шансов на бегство.
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);
Однако не имеет значения, пользуюсь ли я resetEvents [] или ev, и не работает должным образом. Могу ли я реализовать это или я (возможно) недоразумение, как они должны работать.
Спасибо, Р.
Спасибо, я еще не успел проверить это, но благодарит Брайана за ответ. – flavour404