Il semaforo è un meccanismo IPC?Il semaforo è un meccanismo IPC?
risposta
Dipende dal sistema operativo
In Windows denominato semafori sono accessibili tra i processi che utilizzano il CreateSemaphore() e OpenSemaphore() Funzioni
http://msdn.microsoft.com/en-us/library/ms682438%28VS.85%29.aspx
Sì, in molte piattaforme semafori possono sincronizzare attraverso i processi. Dovresti usare semafori "nominati" per questo: più processi accedono all'oggetto tramite un nome, simile agli oggetti del filesystem.
In POSIX, è possibile creare semafori con nome tramite sem_open()
. Per i semafori non omogenei, se il secondo parametro su sem_init()
è diverso da zero, può essere interprocesso, anche se non sono sicuro di come si suppone che un semaforo interprocesso senza nome funzioni.
Si noti che su alcuni sistemi queste funzioni potrebbero non riuscire con ENOSYS
se i semafori di interprocesso non sono supportati (ad esempio OpenBSD).
In Windows, è possibile creare semafori con nome tramite CreateSemaphore()
come indicato da @sergiom.
I semafori POSIX possono essere denominati senza nome o . I semapori senza nome sono allocati nella memoria di processo e inizializzati. I semapori senza nome potrebbero essere utilizzabili da più di un processo, a seconda di come il semaforo è allocati e inizializzati. [...]
Ti piacerebbe sapere more?
realtà semaforo è uno strumento di sincronizzazione, ma è contato come un IPC bcoz vi si accede da più di 1 processo
IPC ha tre utilizzo diverso, come lo scambio di dati (coda di messaggi, PIPE, FIFO), sincronizzazione (file serrature, semaforo, MUTEX) e segnali.
Poiché a partire dalla versione 5.4 (Nov 2013) OpenBSD ha [nome semafori] (http://www.openbsd.org/cgi-bin/man.cgi?query=sem_open&apropos=0&sektion=0&manpath=OpenBSD+Current&arch=i386&format= html). Vedi [questo post del blog] (http://www.tedunangst.com/flak/post/sem-open-named-semaphores) – user454322
Re: "Non sono sicuro di come funzionerà un semaforo interprocesso senza nome": Puoi mettere il semaforo nella memoria condivisa. Inoltre, se crei un semaforo interprocesso senza nome nella memoria normale e poi chiami 'fork()', hai IPC tra i processi padre e figlio. In nessuno dei due casi, ovviamente, è un semaforo senza nome individuabile nel modo in cui un semaforo è chiamato. Ma in genere hai bisogno di un semaforo se c'è qualche altra relazione tra i processi, comunque. – ruakh