Я знаю один очень хороший пример использования TLS. Когда вы реализуете LIBC или портируете один из вариантов LIBC на новую платформу, вам нужно, чтобы переменная 'errno' (которая на однопоточной платформе просто extern int errno) была уникальной для каждого потока. Функции LIBC просто сохраняют его в TLS текущего потока, а вызов errno просто читает его из TLS. TLS - это способ сделать любой поток библиотеки безопасным. Вы храните любой тип в «статических» или «глобальных» данных в TLS, поэтому та же самая функция, вызываемая из другого потока, не повредит ваши «статические» или «глобальные» переменные в другом потоке. Что делает вас функции, входящие из разных потоков.