Sémaphores et mémoire partagée

J’ai une question concernant la programmation multiprocessus en C, j’ai plusieurs processus de lecture qui liront d’un fichier dans un tampon partagé et plusieurs processus d’écriture lisant à partir du tampon et dans un autre fichier, quel type de sémaphores devons-nous utiliser pour cela . et comment pouvons-nous utiliser la mémoire partagée avec les sémaphores.

Si vous êtes sur Linux, une option simple consiste à utiliser des mutex pshared et des variables de condition. Une version recette de glibc sera nécessaire. Essentiellement, dans votre segment de mémoire partagée, vous aurez quelque chose comme:

struct shmem_head { pthread_mutex_t mutex; }; 

Pour initialiser:

 void init_shmem_head(struct shmem_head *head) { pthread_mutexattr_t attr; pthread_mutexattr_init(&attr); pthread_mutexattr_setpshared(&attr, PTHREAD_PROCESS_SHARED ); pthread_mutex_init(&head->mutex, &attr); pthread_mutexattr_destroy(&head->mutex); } 

Vous avez maintenant un mutex, partagé par tous les processus avec le segment de mémoire partagée ouvert. Vous pouvez simplement utiliser pthread_mutex_lock pour verrouiller et pthread_mutex_unlock pour le déverrouiller normalement. Il existe également un pthread_condattr_setpshared similaire si vous souhaitez également des variables de condition.