Wednesday, December 20, 2006

[devel] multi process posix mutex

Jugando con la posibilidad de usar los mecanismos de sincronización de POSIX para threads (pthread_mutex_t, sem_t, pthread_cond_t , etc) llegué a una mini aplicación que es capaz de crear un MUTEX multiproceso de "larga vida" mediante el uso de memoria compartida:

./mproc-mutex estelock i #init
./mproc-mutex estelock l #lock
./mproc-mutex estelock l #lock again: will wait until unlock or signal (eg: Ctrl-C)
./mproc-mutex estelock u #unlock
La clave del fuente está en las sig. líneas:

int fd; char *p;
fd=shm_open(argv[1], O_RDWR|O_CREAT, 0666);
ftruncate(fd, sizeof(pthread_mutex_t));
:
p=mmap(NULL, sizeof(pthread_mutex_t), PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
:
pthread_mutex_init(p, NULL) ;


Más explicaciones en el src: http://www.lugmen.org.ar/~jjo/jjotip/jjotip-mproc-mutex/mproc-mutex.c