Frage

Ist es möglich, fcntl () Systemaufruf auf eine Datei zu verwenden Thread / Prozess-Synchronisation (statt semaphoress) zu erreichen?

War es hilfreich?

Lösung

Ja. Unix Fcntl Sperren (und Dateisystem-Ressourcen im Allgemeinen) sind systemweit, so dass alle zwei Ausführungs-Threads (seien sie getrennte Prozesse oder nicht) können sie benutzen. Ob das eine gute Idee ist oder nicht, ist kontextabhängig.

Andere Tipps

Das ist ein Weg zwischen den Prozessen zu synchronisieren, aber wenn Sie möchten Semaphore nicht verwenden, können Sie Prozess geteilt mutexes, wie Mutexe und Bedingungsvariablen erstellt mit dem PTHREAD_PROCESS_SHARED Attribut auf POSIX-basierten Plattformen (siehe pthread_mutexattr_setpshared() und pthread_condattr_setpshared() ). Eine weitere Option ist ein Ereignis zu verwenden, basierten IPC (Sockets, etc.) Mechanismus blockiert, bis ein Ereignis, das Sie definieren demultiplext (zB über select() ). Es gibt mehrere andere Shared Memory basierten Optionen.

Da Sie C ++ verwenden würde ich mit einem C ++ Framework empfehlen stark diese Art von Inter Synchronisation über mehrere Plattformen vereinfacht wie Boost.Interprocess oder ACE .

Die Fcntl und Herde sind nicht für Gewinde, sondern auch für Verfahren, so dass sie nicht für die Thread-Synchronisation verwendet werden können.

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