Что происходит при обработке сигнала вызова на семафор? - PullRequest
0 голосов
/ 10 января 2019

Что произойдет, если сигнал вызова процесса на семафор.

Скажем, количество семафоров равно 3. Процессы P1, P2, P3 вызвали ожидание семафора и вошли в критическую секцию. P4, P5, P6 также вызвали ожидание, но, поскольку счетчик семафоров уже равен 0, они будут ожидать в очереди ожидания семафора. Теперь пришла P7 и вызвала signal (), будет ли процесс, ожидающий (P4, P5 или P6), разбудить семафор? Если он проснулся, то это ошибка справа, потому что счетчик семафоров равен 2, но p1, p2 и p3 не покинули критическую секцию.

1 Ответ

0 голосов
/ 10 января 2019

Будет пробужден только один из спящих потоков (один из P4, P5 и P6). Вы говорите, что количество семафоров равно 2, но на самом деле это 1, верно?

Это поведение правильно, потому что P7 вызвал signal. Любой поток может вызвать signal на семафоре, даже если он изначально не вызывал wait на семафоре. Это отличается от мьютекса, который имеет концепцию владения (например, поток не может вызвать unlock для мьютекса, если он никогда не вызывал lock для мьютекса).

...