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