Ich führe eine Bibliothek mit einer Funktion, die threadspezifische Variablen benötigt. Aufgrund eines Fehlers in gcc 4.2, wenn ich definiere statisches __thread in x; Wenn die Bibliotheksfunktion über unbenannte API von PERL aufgerufen wird, hängt es.
Ich möchte die Thread-lokalen Variablen mit pthread_key_create () definieren, aber ich muss es tun in der Bibliothek, und ich bekomme keinen speziellen Anruf, wenn ein Thread erstellt wird.
Wie erstelle ich eine Thread-lokale Variable, nur wenn sie nicht existiert? Etwas wie
%Vor%}
Hinweis: Wenn Sie sich fragen, der Grund, warum ich eine Sperre innerhalb des Threads brauche, ist, diese Funktion signal- und threadsicher zu machen.
Um etwas zu tun, verwenden Sie pthread_once
:
Sie können dann get_tls_key()
sicher von Ihrem Callback aus aufrufen, um den TLS-Schlüssel zu erhalten, ohne sich Gedanken über die Erstellung von zwei Schlüsseln machen zu müssen.