pthread_barrier_wait, Subroutine

Zweck

Synchronisiert Threads an einer Barriere.

Syntax

#include <pthread.h>

int pthread_barrier_wait(pthread_barrier_t *barrier);

Beschreibung

Die Subroutine pthread_barrier_wait synchronisiert teilnehmende Threads an der Barriere, auf die die Barriere verweist. Der aufrufende Thread wird blockiert, bis die erforderliche Anzahl Threads pthread_barrier_waitaufgerufen hat, die die Barriere angibt.

Wenn die erforderliche Anzahl von Threads pthread_barrier_waitaufgerufen hat, die die Barriere angibt, wird die Konstante PTHREAD_BARRIER_SERIAL_THREAD an einen nicht angegebenen Thread und 0 an die übrigen Threads zurückgegeben. An diesem Punkt wird die Barriere auf den Status zurückgesetzt, den sie als Ergebnis der letzten pthread_barrier_init -Funktion hatte, die sie referenziert hat.

Die Konstante PTHREAD_BARRIER_SERIAL_THREAD ist in <pthread.h>definiert und ihr Wert unterscheidet sich von allen anderen Werten, die von pthread_barrier_waitzurückgegeben werden.

Die Ergebnisse sind nicht definiert, wenn diese Funktion mit einer nicht initialisierten Barriere aufgerufen wird.

Wenn ein Signal an einen Thread übergeben wird, der auf einer Barriere blockiert ist, setzt der Thread nach der Rückkehr vom Signalhandler das Warten auf die Barriere fort, wenn der Sperrwartestatus nicht abgeschlossen ist (d. h., wenn die erforderliche Anzahl von Threads während der Ausführung des Signalhandlers nicht an der Barriere angekommen ist); andernfalls wird der Thread normal vom abgeschlossenen Sperrwartestatus fortgesetzt. Bis der Thread im Signalhandler von ihm zurückkehrt, können andere Threads die Barriere passieren, nachdem sie alle erreicht haben.

Hinweis: Wenn die erforderliche Anzahl Threads pthread_barrier_waitaufgerufen hat, wird die Konstante PTHREAD_BARRIER_SERIAL_THREAD vom letzten pthread zurückgegeben, der pthread_barrier_waitaufgerufen hat. Befindet sich ein Thread während des Wartens in einem Signalhandler und haben alle erforderlichen Threads die Barriere erreicht, können die anderen Threads an der Barriere vorbeigehen.

Ein Thread, der an einer Barriere geblockt wurde, verhindert nicht, dass ein nicht geblockter Thread, der für die Verwendung derselben Verarbeitungsressourcen infrage kommt, schließlich bei seiner Ausführung Fortschritte macht. Die Eignung für Verarbeitungsressourcen wird durch die Planungsrichtlinie bestimmt.

Parameter

Element Beschreibung
Hindernis Verweist auf die Barriere, an der teilnehmende Threads warten

Rückgabewerte

Nach erfolgreicher Beendigung gibt pthread_barrier_wait PTHREAD_BARRIER_SERIAL_THREAD für einen einzelnen (beliebigen) Thread zurück, der an der Barriere synchronisiert wird, und 0 für die anderen Threads. Andernfalls wird eine Fehlernummer zurückgegeben, die den Fehler angibt.

Fehlercodes

Die Subroutine pthread_barrier_destroy kann in folgenden Fällen fehlschlagen:
Element Beschreibung
EINVAL Der durch barrier angegebene Wert bezieht sich nicht auf ein initialisiertes Sperrobjekt.

Diese Funktion gibt nicht den Fehlercode EINTRzurück.