Синхронизация пула потоков - C#

Узнай цену своей работы

Формулировка задачи:

Всем привет! Задаю я, наверное, такой вопрос не первый и уж явно не последний. Тема такая:
using (ManualResetEvent mre = new ManualResetEvent(false))
{
    ThreadPool.QueueUserWorkItem(delegate { Chance(5000000); });
    ThreadPool.QueueUserWorkItem(delegate { Chance(5000000); mre.Set(); });
    mre.WaitOne();
}
В чём соль ? mre.WaitOne(); активируется тогда, когда завершается второй поток из пула, иногда бывают ситуации, когда первый заканчивается позже, чем второй - значит теряются данные. Как сделать так, чтобы ожидание было на весь пул, а не на один поток ?

Решение задачи: «Синхронизация пула потоков»

textual
Листинг программы
        using (CountdownEvent cde = new CountdownEvent(2)) {
            ThreadPool.QueueUserWorkItem(delegate { DoWork(); cde.Signal(); });
            ThreadPool.QueueUserWorkItem(delegate { DoWork(); cde.Signal(); });
 
            cde.Wait();
        }

ИИ для рефератов и докладов


  • Экспорт Word по ГОСТу
  • Минимум 80% уникальности текста
  • Поиск релевантных источников в интернете
  • Готовый документ за 2 минуты

Оцени полезность:

15   голосов , оценка 4.133 из 5