Ich muss sicherstellen, dass jeweils nur ein Prozess in einer Instanz ausgeführt wird. Unter Windows können Sie den benannten Mutex verwenden. Aber ich habe keine Ahnung, was ich unter Linux verwenden soll.
Ich glaube, ich habe einen Ansatz gesehen, bei dem die App eine exklusive Datei erstellt, aber ich kann sie nicht mehr finden. Verwenden Sie reguläre Dateifunktionen, Busy-Loop?
process
lock
concurrency
Codierer
quelle
quelle
Antworten:
Wenn Sie nur eine Instanz Ihrer App ausführen möchten, können Sie eine Sperrdatei verwenden. Öffnen Sie es mit
O_CREAT|O_EXCL
Flags und es schlägt fehl, wenn die Datei bereits vorhanden ist.Wenn Sie den Zugriff auf eine Datei synchronisieren möchten, verwenden Sie
flock
. Es ist auch möglich, Teile von Dateien mit zu sperrenfcntl
. Flock dient nur zum empfohlenen Sperren, dh ein Programm kann die Sperren ignorieren und trotzdem darauf zugreifen. Das obligatorische Sperren ist mit möglichfcntl
, erfordert jedoch eine spezielle Mount-Option und spezielle Dateiberechtigungen.semget
undsemop
kann auch für die Interprozesssynchronisation verwendet werden.quelle
Interprozess-Mutexe sind ein optionaler Bestandteil von POSIX (siehe _POSIX_THREAD_PROCESS_SHARED auf der Seite unistd.h ). Da sie unter Linux implementiert sind, können Sie sie auch verwenden - siehe Beispiele .
quelle