2010-02-17 10 views
3

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

Répondre

2

Depuis des processus distincts ont des espaces d'adresses distinctes, une fonction de synchronisation devra passer par le noyau ... sauf si vous parvenez à synchroniser via un morceau de mémoire partagée. Et vous avez tellement d'avoir un tel morceau. Par conséquent, je recommande d'utiliser un mutex pthreads (voir pthread_mutex_lock()) situé à un certain endroit dans votre morceau de mémoire partagée. Cela fonctionnera sur un système Linux assez récent (glibc-2.3.2 ou ultérieur, noyau 2.6.x). Avec un mutex, le noyau ne sera invoqué que lors de la contention (deux processus en compétition pour le même verrou), auquel cas le passage par le noyau est la bonne chose à faire. Qu'en est-il des variables atomiques/spinlocks situés dans l'espace mémoire partagé?

+0

Pthread_mutex est-il meilleur? – monkey

+1

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. –

+1

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. –

Questions connexes