Al fine di comprendere il "valore" in sem_init (sem_t * sem, int pshared, valore unsigned int)
Penso che abbiamo bisogno sincronizzarlo con il modo in cui usiamo il semaforo nei codici: quando vogliamo per attendere il semaforo, chiamiamo sem_wait (& mutex), e se vogliamo notificarci di eseguire il sem_wait di altri thread (& mutex), abbiamo bisogno di chiamare sem_post (& mutex). Ma il problema è che se non tutti gli altri thread sem_post (& mutex) chiamano in un primo momento (nella inizializzazione del sistema), quale dovrebbe essere il sem_wait (& mutex) fare? Dovrebbe passare o attendere che altri thread chiamino sem_post (& mutex)? La risposta è nel "valore" in sem_init(). Se è zero, significa che dobbiamo aspettare che alcuni altri thread richiamino sem_post() una volta, quindi potrebbe passare. Se è uno, la prima volta che si chiama sem_wait() passerà subito, ma la seconda volta sem_wait() attenderà (se nessun sem_post viene chiamato durante questi). Quindi il valore in sem_init() significa quante volte potremmo eseguire sem_wait() senza realmente aspettare senza sem_post(). E potremmo considerare il sem_wait() come: /situazione di stallo in attesa fino a quando il valore viene modificato in grande di 0 da un altro thread/
mentre (valore < = 0) {}
value-- ;
e considerare la sem_post() come:
valore ++;
fonte
2015-07-22 08:05:34
Che cosa significa "con un valore"?Significa che è bloccato/sbloccato? Specifica il numero di possibili acquisizioni del semaforo? – SomethingSomething