Семафор Считает - PullRequest
       23

Семафор Считает

4 голосов
/ 16 июля 2009

В .NET есть способ получить счетчик на семафор. Мне не нужен счетчик потоков, просто разумное приближение, поэтому сообщайте о состоянии в потоке графического интерфейса.

В настоящее время я использую двойной счетчик. Настоящий семафор и другая переменная, которая увеличивается и уменьшается синхронно, но это раздражает и подвержено ошибкам.

Ответы [ 3 ]

2 голосов
/ 16 июля 2009

Вместо семафора вы можете использовать Interlocked.Increment и Interlocked.Decrement. Это позволит вам легко прочитать текущее значение, так как это обычная переменная.

Если вы используете его в сочетании с каким-то Mutex для ситуации, когда счет достигает 0, это должно сделать работу. Наследование от выбранного вами мьютекса или WaitHandle даст вам хороший повторно используемый компонент.

См. Класс блокировки .

0 голосов
/ 17 августа 2010

Process Explorer делает это, как угодно. Вероятно, он включает в себя глубокую магию Windows API, поскольку он извлекает максимальное количество, а также текущий счет.

Вы также можете попробовать моральный эквивалент

int old_count=0;
if (AcquireSemaphore(timeout=0)) {
  ReleaseSemaphore(&old_count);
  old_count += 1;
}

но здесь есть оговорка, что он слегка навязчив к коду, использующему семафор.

0 голосов
/ 16 июля 2009

Нет. Для этого вам нужно будет обернуть (подкласс) семафор во что-то со счетчиком. Поскольку вам не важна безопасность потоков, это будет не так сложно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...