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
0
A
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
- 1. Sémaphores, processus et variables incrémentielles dans la mémoire partagée
- 2. tuyau implémentation à l'aide de la mémoire partagée et sémaphores
- 3. Comment utiliser les sémaphores avec la mémoire partagée
- 4. Sempahores la mémoire partagée et processus (IPC)
- 5. PHP et mémoire partagée
- 6. mémoire partagée et constantes
- 7. Lecture et écriture dans la mémoire partagée SysV sans synchronisation (utilisation de sémaphores, C/C++, Linux)
- 8. Linux RSS et mémoire partagée
- 9. Visual Studio et mémoire partagée
- 10. Mémoire partagée Java et C++
- 11. Où placez-vous les sémaphores POSIX lorsque vous utilisez la mémoire partagée POSIX?
- 12. fuite de mémoire partagée C++, comment effacer la mémoire partagée?
- 13. Charger la mémoire partagée dans C
- 14. Mémoire partagée en multitraitement
- 15. Fractionner la mémoire partagée?
- 16. Mémoire partagée de synchronisation
- 17. Mémoire partagée Linux
- 18. Mémoire partagée sous Unix
- 19. Nuage avec mémoire partagée
- 20. Sémaphore de mémoire partagée
- 21. Mémoire partagée CUDA
- 22. Mémoire partagée n'allouant pas?
- 23. Ecriture en mémoire partagée
- 24. Boost :: asio, mémoire partagée et communication interprocess
- 25. Mémoire partagée et communication entre programmes
- 26. mémoire partagée père et enfant dans c
- 27. Performances CUDA: ramification et mémoire partagée
- 28. pointeurs et liste chaînée avec mémoire partagée
- 29. mod_fcgi + APC + Mémoire partagée
- 30. Mémoire partagée sans fichiers mappés en mémoire
Quel système d'exploitation? Utilisez-vous des bibliothèques spécifiques multiprocessing? – nmichaels
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