Frage

Was sind die Kompromisse zwischen einem System V und ein Posix Semaphore mit?

War es hilfreich?

Lösung

O ‚Reilly :

  
      
  • Ein deutlicher Unterschied zwischen dem System V und POSIX Semaphore   Implementierungen, ist, dass in System V   Sie können, wie viel die Semaphore steuern   Zahl kann erhöht oder verringert werden;   wohingegen in POSIX, die Semaphor Zählung   erhöht und um 1 verringert.
  •   
  • POSIX Semaphore erlauben keine Manipulation von Semaphore Berechtigungen,   während System-V-Semaphore Sie ermöglichen   die Berechtigungen ändern von   Semaphore auf eine Teilmenge des ursprünglichen   Erlaubnis.
  •   
  • Initialisierung und Schaffung von Semaphore ist atomar (vom Benutzer   Perspektive) in POSIX Semaphore.
  •   
  • Aus Nutzung Perspektive System V Semaphore sind ungeschickt, während POSIX   Semaphore sind straight-forward
  •   
  • Die Skalierbarkeit von POSIX Semaphore (mit unbenannte Semaphore) viel   höher als System V Semaphore. In einem   Benutzer / Client-Szenario, bei dem jeder Benutzer   ihre eigenen Instanzen eines Servers erstellt,   es wäre besser, POSIX zu verwenden   Semaphore.
  •   
  • System V Semaphore, wenn ein Semaphor-Objekt erstellen, erstellt ein Array von   Semaphoren während POSIX Semaphoren   erstellen nur eine. Deswegen   Merkmal, Semaphore-Erstellung (Speicher   Fußabdruck weist) ist kostspieliger im System   V Semaphore im Vergleich zu POSIX   Semaphore.
  •   
  • Es ist gesagt worden, dass POSIX Semaphore Leistung ist besser als   System V-basierte Semaphore.
  •   
  • POSIX Semaphore bieten einen Mechanismus für prozessweiten Semaphore eher   als systemweite Semaphore. Wenn also ein   Entwickler vergisst die schließen   Semaphore, an Prozess Ausgang des   Semaphore gereinigt. Vereinfacht   Begriffe, bieten POSIX Semaphore ein   Mechanismus für die nicht-persistente   Semaphore.
  •   

Andere Tipps

Zwei große Probleme mit POSIX Shared / named Semaphore in separaten Prozessen verwendet (nicht Gewinde): POSIX Semaphore bieten keinen Mechanismus eine Warteprozess zu wecken, wenn ein anderer Prozess stirbt, während eine Semaphore Sperre hält. Dieser Mangel an Bereinigung kann Zombie Semaphore führen, den anderen oder nachfolgenden Prozess wird dazu führen, dass sie zu benutzen versucht, in einer Sackgasse. Es gibt auch keinen POSIX Weg, um die Semaphore in dem O der Auflistung, um zu versuchen, sie zu identifizieren und aufzuzuräumen. Der Abschnitt POSIX auf SysV IPC hat die IPCs und ipcrm Tools angeben aufzulisten und globale SysV IPC-Ressourcen zu manipulieren. Keine solche Werkzeuge oder auch Mechanismen für POSIX IPC angegeben, obwohl auf Linux können diese Ressourcen oft unter / shm finden. Dies bedeutet, dass ein KILL-Signal an den falschen Prozess zur falschen Zeit ein ganzes System wechselzuwirken Prozesse bis zum Neustart Deadlock kann.

Ein weiterer Nachteil ist die Verwendung von Dateisemantik für POSIX Semaphore. Die Implikation ist, dass es mehr als ein Semaphor mit dem gleichen Namen geteilt, aber in verschiedenen Zuständen. Zum Beispiel ruft ein Prozess sem_open, dann sem_unlink vor sem_close. Dieser Prozess kann noch die Semaphore verwenden wie eine geöffnete Datei Entkoppeln vor dem Schließen. Verfahren 2 Anrufe sem_open auf demselben Semaphor zwischen den sem_unlink und sem_close Anrufen von Verfahren 1, und (nach der Dokumentation) erhalten eine brandneue Semaphor mit dem gleichen Namen, aber in einem anderen Zustand als Prozess 1. Zwei Geteilt Semaphore mit dem gleichen Namen unabhängig Niederlagen den Zweck des gemeinsamen Semaphore arbeiten.

Begrenzung über macht POSIX Semaphore unbrauchbar in einem realen System ohne Garantie geteilt, dass uncatchable Signale nie gesendet werden. Beschränkung zwei durch sorgfältige Codierung gemildert werden, die Kontrolle über die gesamten Code unter der Annahme, dass eine gegebene Semaphore verwenden. Ehrlich gesagt, sein mehr als ein wenig überraschend sie es in den Standard gemacht, wie sie sind.

Ich weiß, das alt ist, sondern zum Nutzen der noch diese mit freundlicher Genehmigung von Google lesen, die Nummer 1 der Grund, warum ich finde System V Semaphore über POSIX (Systemebene) Semaphore zu verwenden ist die Fähigkeit, die Semaphore Ressource zu erwerben, in ein Weg, der vom Kernel EGAL WIE der Prozess beendet automatisch zurückgeführt wird.

Ich bin damit einverstanden, dass die mehr (Atom) Semaphoroperationen selten verwendet werden (obwohl sie während des Staging nützlich sein können), und dass das System V-Schnittstelle ist bizarr, aber es gibt einfach keine Möglichkeit, zuverlässig die gleiche Bereinigungs Semantik zu erreichen mit POSIX Semaphore.

Ich frage mich, was die Leute Design macht schlechte API wie System V Semaphore ! Uneless Sie sehr starke Gründe haben mit System V Semaphore (wie atomare Operationen mit mehreren Inkrement-Dekrement in einem einzigen Schritt) zu gehen, sollten Sie mit POSIX benannte Semaphore halten.

Der verlinkte Artikel beschreibt, was falsch ist und nicht intuitiv mit System V Semaphore.

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