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

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

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

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

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

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

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


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

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

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут