Предположим, у нас есть следующий код в некотором модуле компиляции, который в конечном итоге компилируется в общую библиотеку в Linux (g ++ 4.9)
namespace A {
class B {
static __thread MyObj *myobj;
};
}
Таким образом, он скомпилирован в .so и не экспортирует этот символ (используя скрытую видимость).
Теперь конкретное приложение имеет тот же фрагмент кода, который используется. Т.е. тот же модуль компиляции cpp связан с этим приложением, которое также имеет доступ к указанной выше общей библиотеке.
Вопрос - эти 2 экземпляра myobj находятся на 2 разных адресах в TLS? Я полагаю, что да, но я вижу проблемы, которые могут быть связаны с указанной выше конфигурацией.
Почему используют __thread вместо thread_local?
@stark да. Оно делает.
@vtt, вы правы, но это сторонний код. не мой.





Покажи полный пример. Включает ли клиентский код вышеуказанное в заголовок?