Синхронизация пула потоков - 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();
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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