Question

Est-il possible d'utiliser l'appel système fcntl () sur un fichier pour obtenir une synchronisation fil / processus (au lieu de semaphoress)?

Était-ce utile?

La solution

Oui. serrures fcntl Unix (et les ressources du système de fichiers en général) sont l'ensemble du système, de sorte que les deux fils d'exécution (qu'ils soient séparés ou non des processus) peuvent les utiliser. Que ce soit une bonne idée ou non dépend du contexte.

Autres conseils

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 événement basé IPC (prises, etc.) mécanisme qui bloque jusqu'à ce qu'un événement vous définissez est démultiplexé (par exemple via select() ). Il y a plusieurs autres options en fonction de la mémoire partagée ainsi.

Cependant, puisque vous utilisez C ++, je vous recommande d'utiliser un framework C ++ qui simplifie grandement ce genre de synchronisation interprocessus sur plusieurs plates-formes comme boost.interprocess ou ACE .

Le fcntl et flock ne sont pas pour le fil, mais pour le procédé, de sorte qu'ils ne peuvent pas être utilisés pour la synchronisation du fil.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top