Как __thread в gcc реализовано? Это просто обертка над pthread_getspecific и pthread_setspecific?
С моей программой, которая использует posix API для TLS, я сейчас разочарован тем, что 30% моей исполняемой программы тратится на pthread_getspecific. Я вызвал его при вводе каждого вызова функции, которому нужен ресурс. Компилятор не оптимизирует pthread_getspecific после оптимизации наложения. Поэтому после того, как функции встроены, код в основном ищет правильный указатель TLS снова и снова, чтобы вернуть тот же самый указатель.
Будет ли __thread помочь мне в этой ситуации? Я знаю, что в C11 есть thread_local, но gcc у меня еще не поддерживается. (Но теперь я вижу, что мой gcc поддерживает _Thread_local, а не макрос.)
Я знаю, что могу просто проверить его и посмотреть. Но теперь мне нужно пойти куда-то еще, и мне хотелось бы узнать лучше об этой функции, прежде чем я попытаюсь довольно сильно переписать.