Реализация семафора / критического раздела - PullRequest
1 голос
/ 10 марта 2020

Я пытаюсь узнать о мьютексе, семафорах и критических секциях, и я не уверен в некоторых вещах с семафорами. Семафор - это то же самое, что и критический раздел? Определение того, как использовать семафоры из semaphore.h, гласит:

sem_t m;
sem_init(&m, 0, X); // initialize semaphore to X; what should X be?

sem_wait(&m);
// critical section here
sem_post(&m);

Так что мой вопрос на самом деле: "// критическая секция здесь" на самом деле критическая секция?

1 Ответ

0 голосов
/ 10 марта 2020

Семафоры - это инструменты, используемые для защиты критических секций: чтобы гарантировать, что одновременно выполняется только одна CS.

В вашем примере, первый процесс, который должен выполнить sem_wait(&m), получает выполнить свою копию критического раздела; Любой другой процесс, который попытается выполнить его соотнесение sem_wait, будет заблокирован, пока наш первый процесс не завершит свою CS, выполнив sem_post. В этот момент вернется другой вызов sem_wait, и процесс начнется снова.

...