2010-02-11 9 views

risposta

11

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.

+0

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

+0

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

1

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?

1

realtà semaforo è uno strumento di sincronizzazione, ma è contato come un IPC bcoz vi si accede da più di 1 processo

0

IPC ha tre utilizzo diverso, come lo scambio di dati (coda di messaggi, PIPE, FIFO), sincronizzazione (file serrature, semaforo, MUTEX) e segnali.