2010-02-11 9 views

Respuesta

11

Sí, en muchas plataformas semáforos pueden sincronizar a través de procesos. Usará semáforos "nombrados" para esto: múltiples procesos acceden al objeto a través de un nombre, similar a los objetos del sistema de archivos.

En POSIX, puede crear semáforos con nombre a través del sem_open(). Para los semáforos unmed, si el segundo parámetro para sem_init() es distinto de cero, puede ser interproceso, aunque no estoy seguro exactamente cómo se supone que funciona un semáforo entre procesos sin nombre.

Tenga en cuenta que en algunos sistemas estas funciones pueden fallar con ENOSYS si los semáforos entre procesos no son compatibles (por ejemplo, OpenBSD).

En Windows, puede crear semáforos con nombre a través del CreateSemaphore() como ha mencionado @sergiom.

+0

Desde la versión 5.4 (noviembre de 2013) OpenBSD tiene [semáforos nombrados] (http://www.openbsd.org/cgi-bin/man.cgi?query=sem_open&apropos=0&sektion=0&manpath=OpenBSD+Current&arch=i386&format= html). Ver [esta publicación del blog] (http://www.tedunangst.com/flak/post/sem-open-named-semaphores) – user454322

+0

Re: "No estoy seguro exactamente cómo se supone que funciona un semáforo interproceso sin nombre": Puedes poner el semáforo en la memoria compartida. Además, si crea un semáforo entre procesos sin nombre en la memoria normal y luego llama a 'fork()', tiene IPC entre los procesos padre e hijo. En ninguno de los casos, por supuesto, es un semáforo sin nombre detectable en la forma en que es un semáforo con nombre. Pero en general solo necesitas un semáforo si hay alguna otra relación entre los procesos, de todos modos. – ruakh

1

Los semáforos POSIX no se pueden nombrar o con nombre. Los semáforos sin nombre son asignados en memoria de proceso y inicializados. Los semáforos sin nombre pueden ser utilizables por más de un proceso, dependiendo de cómo el semáforo esté asignado e inicializado. [...]

¿Le gustaría saber more?

1

realidad semáforo es una herramienta de sincronización, pero se cuenta como un IPC bcoz que se accede en más de 1 proceso

0

IPC tiene tres diferentes usos como intercambio de datos (cola de mensajes, PIPE, FIFO), la sincronización (archivo bloqueos, semáforos, MUTEX) y señales.

Cuestiones relacionadas