pthreads v. SSE schwache Speicherordnung

Dienen die Linux-glibc-pthread-Funktionen auf x86_64 als Zäune für schwach geordnete Speicherzugriffe? (pthread_mutex_lock / unlock sind die genauen Funktionen, an denen ich interessiert bin).

SSE2 stellt einige Anweisungen mit einer schwachen Speicherreihenfolge bereit (insbesondere nicht temporäre Speicher wie Movntps). Wenn Sie diese Anweisungen verwenden und sicherstellen möchten, dass ein anderer Thread / Core eine Bestellung erhält, benötigen Sie meines Wissens einen expliziten Zaun, z. B. eine sfence-Anweisung.

Normalerweise erwarten Sie, dass die pthread-API angemessen als Zaun fungiert. Ich vermute jedoch, dass normaler C-Code auf x86 keine schwach geordneten Speicherzugriffe generiert. Daher bin ich nicht sicher, dass pthreads als Zaun für schwach geordnete Zugriffe fungieren müssen.

Beim Durchlesen des glibc pthread-Quellcodes wird am Ende ein Mutex mit "lock cmpxchgl" implementiert, zumindest auf dem unkontrollierten Pfad. Ich vermute also, dass ich wissen muss, ob dieser Befehl als Zaun für SSE2-Zugriffe mit schwacher Reihenfolge fungiert.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage