Est-il possible d'utiliser l'appel système fcntl() sur un fichier pour obtenir une synchronisation thread/processus (au lieu de semaphoress)?fcntl() pour la synchronisation de thread ou de processus?
Répondre
Oui. Les verrous fcntl Unix (et les ressources du système de fichiers en général) sont à l'échelle du système, de sorte que deux threads d'exécution (qu'ils soient des processus séparés ou non) peuvent les utiliser. Que ce soit une bonne idée ou non dépend du contexte.
Merci, ma question n'était pas de savoir si je veux faire cela mais si c'est possible. Et il s'est avéré que oui c'est possible. Merci encore. –
C'est une façon de synchroniser des processus, mais si vous ne voulez pas utiliser sémaphores, vous pouvez utiliser processus mutex partagé, comme les mutex et les variables de condition créées avec l'attribut PTHREAD_PROCESS_SHARED
sur les plates-formes POSIX (voir pthread_mutexattr_setpshared()
et pthread_condattr_setpshared()
). Une autre option consiste à utiliser un mécanisme IPC (sockets, etc.) basé sur un événement qui se bloque jusqu'à ce qu'un événement que vous définissez soit démultiplexé (par exemple, via select()
). Il existe également plusieurs autres options basées sur la mémoire partagée.
Cependant, puisque vous utilisez C++, je vous recommande d'utiliser un framework C++ qui simplifie grandement ce type de synchronisation interprocess sur plusieurs plates-formes telles que boost.interprocess ou ACE.
Les fichiers fcntl et flock ne sont pas destinés au thread mais au process, ils ne peuvent donc pas être utilisés pour la synchronisation de threads.
fcntl a une vérification de faux verrouillage multi-thread (défaut de conception). Pensez à un tel scénario, deux processus qui ont tous deux deux threads. Le fil 1 ressemble à: for (;;) {fcntl_auto_lock (file1);}. Le thread 2 ressemble à: for (;;) {fcntl_auto_lock (fichier2);}. Le fcntl renverrait EDEADLK (35) Ici peut trouver plus de détails: https://bugzilla.mozilla.org/show_bug.cgi?id=62457#c5 – alpha
- 1. Synchronisation de thread
- 2. Java Multi problème de synchronisation de thread?
- 3. Synchronisation de thread avec boost :: condition_variable
- 4. Coordination de mmap partagée à l'aide de verrous fcntl?
- 5. Modèle correct pour la synchronisation multi-thread? (C#)
- 6. Qu'est-ce que la synchronisation de thread dans Java?
- 7. BPEL pour la synchronisation de données
- 8. Synchronisation ou réplication de fichier
- 9. Sécurité du thread/processus pour la ressource non gérée
- 10. iPhone SDK - Barre de recherche Synchronisation de thread Question
- 11. Pas de saisie manuelle pour le problème de fcntl
- 12. Comment diviser le processus de synchronisation dans le cadre de synchronisation
- 13. Exécution d'un processus ou d'un thread séparé dans Qt
- 14. fcntl substitut sur Windows
- 15. débogage de la synchronisation Java
- 16. primitive de synchronisation pour léger file d'attente de thread de travail
- 17. Synchronisation multi-processus - meilleur choix que les sémaphores?
- 18. GDB Quirks avec processus de thread
- 19. consommation de mémoire de niveau de thread de processus
- 20. Java - Synchronisation de thread dans une application Web
- 21. Signaler un thread à travers la limite de processus
- 22. synchronisation de threads
- 23. Webservice Orchestration pour la synchronisation de base de données
- 24. Jeux de synchronisation Java: synchronisation && wait && notifier
- 25. Combien coûte la synchronisation?
- 26. Boost Synchronisation de fil
- 27. le réglage de mot de contrôle FPU par thread ou par processus?
- 28. Où commencer lors de la programmation des algorithmes de synchronisation de processus comme clone/fork, sémaphores
- 29. Débloquer un thread d'un autre processus, en C++
- 30. Quelque chose de similaire aux services de synchronisation d'Apple ou au cadre de synchronisation de Microsoft?
Pourquoi voudriez-vous faire cela? Quelques informations supplémentaires sur ce que vous essayez d'accomplir seraient utiles. – LnxPrgr3