Чтобы понять "значение" в sem_init (sem_t * sem, int pshared, unsigned int value)
Я думаю, что нам нужно синхронизировать его с тем, как мы используем семафор в кодах: когда мы хотимдожидаясь семафора, мы вызываем sem_wait (& mutex), и если мы хотим уведомить о запуске sem_wait (& mutex) других потоков, нам нужно вызвать sem_post (& mutex).Но проблема в том, что если никакие другие потоки сначала не вызывают sem_post (& mutex) (при инициализации системы), что должен делать sem_wait (& mutex)?Это должно пройти или ждать, пока другие потоки вызовут sem_post (& mutex)?Ответ находится в «значении» в sem_init ().Если это ноль, это означает, что мы должны ждать, пока некоторые другие потоки вызовут sem_post () один раз, тогда это может пройти.Если это так, то первый вызов sem_wait () в первый раз будет проходить сразу, а второй sem_wait () будет ждать (если во время них не было вызвано sem_post).Таким образом, значение в sem_init () означает, сколько раз мы могли бы выполнить sem_wait () без реального ожидания без использования sem_post ().И мы могли бы рассмотреть sem_wait () как: / тупик, ожидающий, пока значение не будет изменено на значение больше 0 другим потоком /
while (value <= 0) {} </p>
значение -;
И рассмотрим функцию sem_post () как:
значение ++;