============== Beispiellösung [TOC] ============== Antworten ========= * Mit den Funktionen _sighold_ und _sigrelse_ lässt sich das Signal _SIGTERM_ hinreichend lange blockieren. Dabei ist aber zu beachten, dass die Blockierung an drei Stellen aufgehoben werden muss: für den aufrufenden Prozess, für $P_0$ nach der Einrichtung des Signalbehandlers für _SIGTERM_ und für $P_1, \dots, P_{n-1}$ unmittelbar nach der Erzeugung. * In der Schleife müssen _SIGTERM_ und _SIGUSR1_ blockiert werden und _sigsuspend_ wird so aufgerufen, dass die Blockierung der beiden Signale während des Wartens aufgehoben wird. Implementierung =============== :import: session03/tokenring2.c ---- SHELL (path=session03,hostname=theon) ---- gcc -Wall -o tokenring2 tokenring2.c ./tokenring2 ----------------------------------------------- Beachten Sie, dass unter Linux die Funktionen _sighold_ und _sigrelse_ anders als bei Solaris nicht per Voreinstellung in den entsprechenden Headern deklariert werden, solange nicht ein entsprechender POSIX-Standard eingefordert wird: ---- SHELL (path=session03,hostname=heim) -------------- gcc -Wall -o tokenring2 tokenring2.c gcc -Wall -D_XOPEN_SOURCE=600 -o tokenring2 tokenring2.c ./tokenring2 -------------------------------------------------------- :navigate: up -> doc:index back -> doc:session03/page03