Семафор без исключения на переполнение до максимального значения


Мне требуется использовать семафор в моем приложении, которое включает в себя несколько потоков. Мое использование может быть обычным сценарием,но m застрял с API.

В моем использовании семафор может быть отправлен из нескольких точек, в то время как есть только один поток, который ожидает семафор.

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

Короче говоря, мне требуется следующий код для работы.
private static Semaphore semaphoreResetMapView = new Semaphore(0, 1);  // Limiting the max value of semaphore to 1.

void threadWait(){
    while (true){
        semaphoreResetMapView.WaitOne();
        <code>
    }
}

void Main(){

    tThread = new Thread(threadWait);
    tThread.Start();

    semaphoreResetMapView.Release(1);
    semaphoreResetMapView.Release(1);
    semaphoreResetMapView.Release(1);  // Multiple Releases should not throw an error. Rather saturate the value of semaphore to 1.
}
Я буду признателен за любую помощь в этом вопросе.
1   2   2013-08-06 12:52:10

1 ответ:

Похоже, что вам на самом деле не нужен семафор - вам просто нужен AutoResetEvent. Ваши" постинговые " темы просто вызовут Set, и ожидающая нить позвонит.WaitOne.

Или вы могли бы просто использовать Monitor.Wait и еще Monitor.Pulse...