Gibt es eine Möglichkeit Thread lokale Variablen zu verwenden, wenn ACE verwenden?
-
19-09-2019 - |
Frage
Ich bin mit ACE-Threads und muß jeden Thread sein eigenes int Mitglied haben. Ist das möglich?
Lösung
ACE nennt dies "Thread Specific Storage". Check this out: ACE_TSS . Das ist alles, was ich darüber weiß, sorry kann nicht mehr helfen.
Die Wikipedia-Seite für thread-lokale Speicher sagt, daß es ein pThreads Weg zu tun dies auch.
Andere Tipps
Die Plattform spezifisch. Fenster zum Beispiel sollten Sie __declspec( thread )
. Der Compiler nutzen die TLS API shouldn Sie (TlsAlloc, TlsFree und Freunde), und auf Win32 immer leise Sie verwenden FLS (Fiber Local Storage) anstelle von TLS, aber die TLS-API wird Umleitung sowieso auf jedem modernen Win32-Version FLS.
Ja. Sie können die ACS_TSS<type>
Vorlage verwenden, die für „Thread spezifische Speicher“ ausgelegt ist. (Dh lokale Variablen Gewinde)
Weitere Informationen finden Sie in den docs auf ACE_TSS .
GCC unterstützt direkt TLS für einige Ziele . Sie können das GCC-spezifische __thread
Schlüsselwort verwenden Thread-lokalen Variablen für die Definition (muss statisch oder global sein).
libace selbst eingebaut lokalen Thread-Sachen hat, können Sie die Dokumentation und Blick auf die Beispielcode
Es gibt keine Möglichkeit zu haben ACE_TSS den Anfangswert für alle Threads festgelegt; Sie können ganz einfach, obwohl der Ausgangswert nur nach der Eingabe in Thread-Funktion gesetzt.