Skip to content

About

z/OS UNIX System Services sample: fork(), spawn() and pthread mutex coordination

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

6 Commits

Folders and files

Repository files navigation

fork-spawn-mutex-sample

Beispielprogramm fuer z/OS UNIX System Services: Prozesserzeugung mit fork() und spawn(), Koordination paralleler Threads mit pthread-Mutexen (pthread_mutex_init()).

Sample for z/OS UNIX System Services: fork(), spawn() and thread coordination with pthread mutexes. Documentation is in German.

Was das Programm tut

  1. Der Elternprozess legt zwei Mutexe an.
  2. Kindprozess A entsteht per fork(), Kindprozess B per spawnp() (das Programm startet sich selbst mit --spawn-child). Beide liefern Zahlen ueber je eine Pipe zurueck.
  3. Zwei Reader-Threads lesen die Pipes, drei Rechen-Threads erzeugen eigene Werte. Alle fuenf addieren auf dieselbe Summe, geschuetzt durch den Mutex shared.lock.
  4. Das Programm prueft die Summe gegen den Sollwert und gibt aus, wie oft ein Thread auf den Mutex warten musste (Buchfuehrung per pthread_mutex_trylock(), da POSIX keine Mutex-Abfrage kennt).

Auf Nicht-z/OS-Systemen wird ersatzweise posix_spawnp() verwendet, damit sich das Beispiel unter Linux testen laesst.

Dateien

Datei Inhalt
ussdemo.c Quelltext
Makefile Uebersetzung mit make; tab-frei, ohne GNU-Erweiterungen
USSDEMO.jcl Batch-Job: Uebersetzen und Ausfuehren per BPXBATCH
USSDEMO-Dokumentation.docx Programmdokumentation mit Ablaufdiagrammen
doc/ Build-Skript fuer die Dokumentation (Node.js)

Alle Quelldateien sind tab-frei und keine Zeile ist laenger als 71 Zeichen, damit sie ISPF-Editor, FB80-Datasets und Dateitransfers unbeschadet ueberstehen.

Uebersetzen

z/OS UNIX mit xlc (Voreinstellung). make cfg erzeugt eine lokale Compiler-Konfiguration cc.cfg, in der die Compiler-Bibliothek (CBC.SCCNCMP) als STEPLIB eingetragen ist:

make cfg
make CFG=-F./cc.cfg

Steht CBC.SCCNCMP in LNKLST oder LPA, genuegt make.

Andere Compiler:

make CC=xlclang CFLAGS="-q64 -O2"              # falls installiert
make CC=ibm-clang CFLAGS=-O2
make CC=gcc CFLAGS="-O2 -Wall -pthread"        # Linux

Ausfuehren:

make run

Meldet der Compiler FSUM3221 oder FSUM3224 mit Signal 9 (Abend EC6, Reason ....C032), fehlt das Compiler-Modul (CCNDRVR bzw. CLCDRVR) im MVS-Suchpfad. Die Shell-Variable STEPLIB hilft nicht, der Wert kommt nur aus dem Attribut steplib der Compiler- Konfiguration. Details in den Kommentaren von Makefile und JCL sowie in Abschnitt 7.2 der Dokumentation.

Teststand

Auf z/OS 2.4 mit xlc uebersetzt (lokale Konfiguration cc.cfg) und in der z/OS UNIX Shell mit _BPX_SHAREAS=YES ausgefuehrt: beide Kindprozesse enden mit Exit-Code 0, die Summe stimmt. Die Ausgabe dieses Laufs steht in doc/sample-output.txt. Der Batch-Weg ueber USSDEMO.jcl (BPXBATCH, Steps COMPILE und RUN) lief ebenfalls durch.

Unter Linux (WSL, gcc 13) uebersetzt das Programm ohne Warnungen, die Summe stimmt, ThreadSanitizer meldet keine Data Races.

Dokumentation neu erzeugen

cd doc
npm install
npm run build

Erzeugt USSDEMO-Dokumentation.docx im Repo-Verzeichnis aus den aktuellen Quelldateien. Die Diagramme werden mit resvg gerendert; die Schrift Segoe UI wird vorausgesetzt (Windows).

About

z/OS UNIX System Services sample: fork(), spawn() and pthread mutex coordination

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages