Число ожидающих и рабочих потоков на семафоре - PullRequest
2 голосов
/ 30 марта 2011

Есть ли способ узнать, сколько

  1. сколько потоков ожидает на семафоре?
  2. сколько потоков в настоящее время заняло семафор?
  3. , если я используюпоток потоков, ожидающий на семафоре, как позволить основному потоку дождаться завершения потока потоков

Спасибо.

1 Ответ

7 голосов
/ 30 марта 2011

Это запрещенное знание в синхронизации потоков.Потому что это невозможно сделать точно.Это представляет неразрешимое состояние гонки.Когда вы используете подход Хабджана, вы придете к выводу, что, скажем, два потока ожидают.Через микросекунду другой поток вызывает WaitOne (), и их три.Но вы будете принимать решения, основываясь на этом устаревшем значении.

С условиями гонки нечего возиться, их невероятно сложно отлаживать.Они имеют привычку делать ваш код неудачным только один раз в неделю.Как только вы добавите инструментальный код, чтобы попытаться диагностировать причину сбоя вашего кода, они перестанут появляться, потому что этот добавленный код изменил время.

Никогда не делайте этого.

...