Con el fin de entender el "valor" en sem_init (sem_t * SEM, Int pshared, el valor entero sin signo)
Creo que tenemos que sincronizarla con la forma en que utilizamos el semáforo en códigos: cuando queremos para esperar al semáforo, llamamos a sem_wait (& mutex), y si queremos notificar para que se ejecuten otros hilos 'sem_wait (& mutex), necesitamos llamar a sem_post (& mutex). Pero el problema es que si ningún otro hilo llama a sem_post (& mutex) al principio (en la inicialización del sistema), ¿qué debería hacer el sem_wait (& mutex)? Debe pasar o esperar a que otros hilos invoquen sem_post (& mutex)? La respuesta está en el "valor" en sem_init(). Si es cero, significa que debemos esperar a que otros subprocesos invoquen sem_post() una vez, luego podría pasar. Si es uno, la primera vez que invoque sem_wait() pasará de inmediato, pero la segunda vez sem_wait() esperará (si no se llama sem_post durante ellos). Así que el valor en sem_init() significa cuántas veces podríamos ejecutar sem_wait() sin esperar realmente sin ningún sem_post(). Y podríamos considerar la sem_wait() como: /estancamiento de espera hasta que el valor se cambia a mayor que 0 por otro subproceso/
tiempo (valor < = 0) {}
value-- ;
y considerar la sem_post() como:
valor ++;
¿Qué significa "con un valor"?¿Significa que está bloqueado/desbloqueado? ¿Especifica el número de posibles adquisiciones del semáforo? – SomethingSomething