J'ai un morceau de mémoire partagée contenant des données. La lecture/écriture de ces données doit être synchronisée entre différents processus. À ce moment j'utilise des sémaphores POSIX sans nom. Puisque ma principale préoccupation est la vitesse, j'aimerais savoir si les sémaphores sont optimales ici? Se terminent-ils par un appel système (userspace -> espace noyau) ou forcent-ils les changements de contexte? Que suggérez-vous?Méthode de synchronisation interprocessus rapide
Quelques infos sur sémaphores Sans nom: http://linux.die.net/man/3/sem_init
Pthread_mutex est-il meilleur? – monkey
Les variables atomiques et les spinlocks font la moitié du travail; parfois c'est suffisant. Un mutex commence par un spinlock, mais si le verrou appartient déjà à une autre entité, alors pthread_mutex_lock() appelle le noyau pour attendre que le verrou soit libéré. Un spinlock brut se termine généralement par une attente occupée, c'est-à-dire en utilisant le CPU pendant le blocage. –
Il est utile de noter que, par défaut, un mutex pthread "ne sera opéré que par des threads créés dans le même processus que le thread qui a initialisé le mutex". Utilisez pthread_mutexattr_setpshared (http://goo.gl/PjHHEI) pour modifier ce comportement. –