[LINUX] So steuern Sie Multiprozesse ausschließlich in C-Sprache

Überblick

Memo, wenn es in mehreren Prozessen exklusiv ist, wenn sich die Ausführungsdatei in der C-Sprache unterscheidet

Code

GitHub

Prozessablauf

  1. Erstellen Sie einen Shared Memory Key
  2. Erstellen Sie einen gemeinsamen Speicher
  3. Erstellen Sie ein Mutex-Objekt im gemeinsam genutzten Speicher
  4. Sperren / Entsperren mit Mutex im gemeinsam genutzten Speicher

1. Erstellen Sie einen Shared Memory Key

Wenn Sie sich nicht zu sehr darum kümmern, war der in shmget verwendete Schlüssel IPC_PRIVATE, aber in mehreren Prozessen wird für jeden ein gemeinsamer Speicher erstellt. In diesem Zustand funktioniert Fork nach dem Erstellen von Mutex gut, aber wenn die ausführbare Datei anders ist, kann sie nicht gut ausgeschlossen werden.

Durch Angabe des Schlüssels mit shmget kann daher derselbe gemeinsam genutzte Speicher für eine andere ausführbare Datei verwendet werden.

ftok erstellt einen Schlüssel mit einem vorhandenen Dateipfad und einer proj_id größer oder gleich 0.

2. Erstellen Sie einen gemeinsamen Speicher

Verwenden Sie den erstellten Schlüssel zum Shmget.

Wenn IPC_CREAT | IPC_EXCL angegeben ist, wird der gemeinsam genutzte Speicher für den Schlüssel erstellt, wenn er nicht vorhanden ist, und ein Fehler tritt auf, wenn er bereits vorhanden ist. Auf diese Weise kann festgelegt werden, ob die nachfolgende initialisierungsbezogene Verarbeitung durchgeführt werden soll oder nicht.

3. Erstellen Sie ein Mutex-Objekt im gemeinsam genutzten Speicher

Erstellen Sie wie gewohnt ein Mutex-Objekt.

4. Sperren / Entsperren mit Mutex im gemeinsam genutzten Speicher

Bei Bedarf wie gewohnt sperren / entsperren.

Zusammenfassung

Besorgnis, Sorge

Recommended Posts

So steuern Sie Multiprozesse ausschließlich in C-Sprache
So verpacken Sie C in Python
Verwendung von Google Test in C-Sprache
Verwendung der C-Bibliothek in Python
So generieren Sie eine Sequenz in Python und C ++
Versuchen Sie, ein Python-Modul in C-Sprache zu erstellen
Gehen Sie in die Sprache, um Teil 7 C in der Sprache GO zu sehen und sich daran zu erinnern
Einbettung der Maschinensprache in die Sprache C.
Wie man in Python entwickelt
So zeigen Sie das Änderungsdatum einer Datei in C-Sprache bis zu Nanosekunden an
So beschränken Sie die API, die in der gemeinsam genutzten Linux-Bibliothek in C-Sprache veröffentlicht werden soll
[Go language] So erhalten Sie Terminaleingaben in Echtzeit
So implementieren Sie vorläufig einen Fortschrittsbalken in einer Skriptsprache
Erstellen und Verwenden von statischen / dynamischen Bibliotheken in C-Sprache
Ich habe versucht, die Zeit und die Zeit der C-Sprache zu veranschaulichen
[Python] Wie man PCA mit Python macht
Umgang mit Sitzungen in SQLAlchemy
Modultest mit mehreren Instanzen in C-Sprache
Verwendung von Klassen in Theano
Wie man nüchtern mit Pandas schreibt
So sammeln Sie Bilder in Python
Realisieren Sie die Schnittstellenklasse in der Sprache C.
So aktualisieren Sie Spyder in Anaconda
Einführung in Protobuf-c (C-Sprache ⇔ Python)
So konvertieren Sie 0,5 in 1056964608 auf einmal
Langsame Verwendung der Computersprache 2
Wie man CSS in Django reflektiert
Wie man Prozesse in großen Mengen abbricht
Wie man MySQL mit Python benutzt
Verwendung von ChemSpider in Python
Verwendung von PubChem mit Python
So erstellen Sie den MongoDB C-Sprachtreiber
So führen Sie TensorFlow 1.0-Code in 2.0 aus
Wie man die Computersprache langsam benutzt
Segfo mit 16 Zeichen in C-Sprache
Umgang mit Japanisch mit Python
So melden Sie sich bei Docker + NGINX an
So rufen Sie PyTorch in Julia an
Einführung in die in C Language Part 1 Server Edition erlernte Socket-API
[C-Sprache] So erstellen, vermeiden und erstellen Sie einen Zombie-Prozess
Verwendung berechneter Spalten in CASTable
Linkliste (list_head / queue) in C-Sprache
[Einführung in Python] Wie verwende ich eine Klasse in Python?
So unterdrücken Sie Anzeigefehler in matplotlib
Exklusive Steuerung mit Sperrdatei in Python
Dynamisches Definieren von Variablen in Python
So machen Sie R chartr () in Python
So löschen Sie abgelaufene Sitzungen in Django
[Itertools.permutations] So löschen Sie eine Sequenz in Python
[C-Sprache] Ich möchte Zufallszahlen im angegebenen Bereich generieren
So implementieren Sie einen verschachtelten Serializer mit drf-flex-Feldern
So arbeiten Sie mit BigQuery in Python
So führen Sie Befehle mit einem Jupyter-Notebook aus
Wie man in GitPython '--gags fetch --tags' macht
Wie bekomme ich Stacktrace in Python?
So zeigen Sie die neunundneunzig Tabelle in Python an
So extrahieren Sie einen Polygonbereich in Python
So weisen Sie den Index im Pandas-Datenrahmen neu zu