fcntl () für Thread oder Prozess-Synchronisation?
-
21-09-2019 - |
Frage
Ist es möglich, fcntl () Systemaufruf auf eine Datei zu verwenden Thread / Prozess-Synchronisation (statt semaphoress) zu erreichen?
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.