2011-06-20 5 views
0

J'ai une question concernant la programmation multiprocessus en C, j'ai plusieurs processus de lecture qui vont lire un fichier dans un tampon partagé et plusieurs processus d'écriture qui lisent depuis le tampon et dans un autre fichier, quel type de sémaphores aurons-nous besoin d'utiliser pour cela. et comment pouvons-nous utiliser la mémoire partagée avec les sémaphores.Sémaphores et mémoire partagée

+1

Quel système d'exploitation? Utilisez-vous des bibliothèques spécifiques multiprocessing? – nmichaels

+0

linux ici sont tous les en-têtes J'inclus dans le fichier, #include #include #include #include #include #include #include #include #include #include #include espérons que cela aide – MRK

Répondre

1

Si vous êtes sur linux, une option facile est d'utiliser pshared mutexes et les variables de condition. Une version recet de glibc sera nécessaire. Essentiellement à l'intérieur de 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 ouverte. Vous pouvez simplement utiliser pthread_mutex_lock pour verrouiller et pthread_mutex_unlock pour déverrouiller normalement. Il y a aussi un pthread_condattr_setpshared similaire si vous voulez aussi des variables de condition.

Questions connexes