Comment puis-je synchroniser deux processus sur l'accès aux mêmes ressources?

StackOverflow https://stackoverflow.com/questions/1656568

  •  11-09-2019
  •  | 
  •  

Question

I ai deux procédés qui accèdent à la même mémoire physique (addr de données GPIO). Alors, comment puis-je avoir synchronisé entre ces applications? Je comprends que nous avons une sorte de mécanisme de verrouillage tels que mutex et sémaphores, de sorte que la méthode est le plus rapide?

Merci pour votre aide,

-nm

Était-ce utile?

La solution

Les mutex et sémaphores sont généralement considérés comme des solutions dans le même accès concurrentiel espace d'adressage -. Ce qui signifie que les différentes parties du même programme verrouillent l'accès à une ressource en utilisant un de ces bidules

Lorsque vous avez affaire à des processus distincts, la méthode standard pour le faire sur Linux est de créer quelque chose dans /var/lock, comme /var/lock/myapp.lock et Placez votre PID suivie d'une nouvelle ligne en elle . Ensuite, d'autres processus vérifieront son existence, et si vous êtes rusés vérifier le PID pour vous assurer qu'il est encore en vie, aussi.

Si vous avez besoin d'un accès en temps réel à la zone, sauter le système de fichiers et les processus devront communiquer via IPC (LET_ME_KNOW_WHEN_DONE, OKAY_IM_DONE, vous voyez l'idée), ou - mieux - écrire un processus dont le seul but est à lire et à écrire dans la mémoire GPIO, et vos autres programmes communiquent avec il via IPC (probablement la meilleure approche).

Autres conseils

mutex signifie l'exclusion mutuelle - un sémaphores est juste une variable utilisée pour déterminer si la ressource est en cours d'utilisation. Dans les fenêtres, il y a un objet Mutex qui peut être créé pour protéger une ressource partagée.

La question est quelle langue utilisez-vous? Quel OS (je suppose linux). La plupart des langues offrent un soutien pour le multi-threading et de l'exclusion mutuelle, et vous devez utiliser les constructions intégrées.

Par exemple, en utilisant C sous Linux, vous voudrez peut-être

inclure semaphore.h

et rechercher les appels à sem_init, sem_wait etc.

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