So erstellen Sie pthread-spezifische Variablen ohne __thread

8

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.

    
dbbd 04.07.2011, 08:35
quelle

1 Antwort

6

Um etwas zu tun, verwenden Sie pthread_once :

%Vor%

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.

    
Anthony Williams 04.07.2011, 08:48
quelle

Tags und Links