Wie funktioniert die gcc `__thread` Arbeit?

Wie ist __thread im gcc implementiert? Ist es einfach nur ein wrapper über pthread_getspecific und pthread_setspecific?

Mit meinem Programm, das mit der posix-API für TLS, ich bin ein bisschen enttäuscht, jetzt zu sehen, dass 30% meiner Programm-Laufzeit ausgegeben wird, auf pthread_getspecific. Ich rief Sie auf den Eintrag, der jede Funktion aufrufen, muss die Ressource. Der compiler scheint nicht zu optimieren, aus pthread_getspecific nach dem inlining-Optimierung. So nach und nach die Funktionen sind inline code ist im Grunde genommen das suchen nach der richtigen TLS Zeiger wieder und wieder die gleichen Zeiger zurückgegeben.

Wird __thread helfen mir in dieser situation? Ich weiß, dass es thread_local in C11, aber der gcc hab ich nicht unterstützen es noch. (Aber jetzt sehe ich, dass mein gcc unterstützt _Thread_local einfach nicht das makro.)

Ich weiß, ich kann es einfach testen und sehen. Aber ich habe woanders geht jetzt, und ich würde gerne wissen, besser auf eine Funktion, bevor ich den Versuch einer ganz groß schreiben.

  • __thread anders implementiert auf unterschiedlichen Plattformen, auf einige (du nicht sagen Sie uns was Sie Programmieren, für), umgesetzt werden könnte mit pthread_getspecific.
  • Bitte geben Sie uns mehr Informationen! Ich würde wirklich gerne um Ihr problem zu lösen aber jetzt weiß ich nicht genug über das, was Plattform, die Sie verwenden / wie Sie Ihren code kompilieren zu können, geben Sie eine Antwort auf die Frage, wie man die thread-lokalen Speicher besser.
InformationsquelleAutor xiver77 | 2015-08-27
Schreibe einen Kommentar