Wie kann ich synchronisiert zwei Verfahren auf die gleichen Ressourcen zugreifen?

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

  •  11-09-2019
  •  | 
  •  

Frage

Ich habe zwei Prozesse, die auf den gleichen physischen Speicher zugreifen (GPIO Daten adr). Also, wie kann ich zwischen diesen Anwendungen synchronisiert? Ich verstehe, dass wir eine Art von Verriegelungsmechanismus wie Mutex und Semaphore, also welche Methode ist am schnellsten?

Dank für Ihre Hilfe,

-nm

War es hilfreich?

Lösung

Mutexes und Semaphore werden im Allgemeinen als Gleichzeitigkeit Lösungen im gleichen Adressraum betrachtet -. Was bedeutet, dass verschiedene Teile des gleichen Programms ihren Zugriff auf eine Ressource sperren wird eine dieser contraptions mit

Wenn Sie mit separaten Prozessen zu tun haben, der Standard-Weg, dies auf Linux zu tun ist, etwas in /var/lock zu schaffen, wie /var/lock/myapp.lock und Zeigen sie mit PID es durch eine neue Zeile gefolgt. Dann werden auch andere Prozesse für seine Existenz zu überprüfen, und wenn Sie schlau sind die PID überprüfen, um sicherzustellen, dass es immer noch am Leben ist, auch.

Wenn Sie Echtzeit-Zugriff auf den Bereich benötigen, überspringen Sie das Dateisystem und die Prozesse müssen über IPC kommunizieren (LET_ME_KNOW_WHEN_DONE, OKAY_IM_DONE, erhalten Sie die Idee), oder - besser - schreiben einen Prozess, deren einziger Zweck lesen und schreiben an den GPIO-Speicher und andere Programme kommunizieren mit es über IPC (wahrscheinlich der beste Ansatz).

Andere Tipps

bedeutet Mutex mutual exclusion - ein Semaphore nur eine Variable verwendet, um zu bestimmen, ob die Ressource verwendet wird. In Windows gibt es ein Mutex-Objekt, das erstellt werden kann, eine gemeinsame Ressource zu schützen.

Die Frage ist, in welcher Sprache verwenden Sie? Was O (Ich gehe davon aus Linux). Die meisten Sprachen bieten Unterstützung für Multi-Threading und gegenseitige Ausgrenzung, und Sie sollten die Einbau-Konstrukte verwenden.

Zum Beispiel mit C auf Linux, mögen Sie vielleicht

umfassen semaphore.h

und die Rufe nach sem_init nachschlagen, sem_wait etc.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top