Использование __thread в С++ 0x
Я прочитал, что в С++ появилось новое ключевое слово: it __thread
из того, что я прочитал.
Все, что я знаю, это ключевое слово, которое будет использоваться как ключевое слово static
, но я ничего не знаю. Разве это ключевое слово просто означает, что, например, если переменная была объявлена так:
__thread int foo;
то что-нибудь связанное с этой переменной будет выполнено с помощью нового потока?
Ответы
Ответ 1
Это thread_local
, а не __thread
. Он использовал для определения переменных, которые имеют длительность хранения потока.
thread_local
- новый спецификатор продолжительности хранения, добавленный в С++ 0x. Есть и другая продолжительность хранения: статическая, автоматическая и динамическая.
От эта ссылка:
поток локальной продолжительности хранения (функция С++ 11). Переменная выделяется, когда поток начинается и освобождается, когда поток заканчивается. Каждый поток имеет свой собственный экземпляр переменной. Только переменные, объявленные thread_local, имеют такую продолжительность хранения.
Я думаю, что введение этого ключевого слова стало возможным благодаря введению стандартизованной модели памяти в С++ 0x:
Ответ 2
Из статьи в Википедии "Потоковое локальное хранилище" :
Потоковое локальное хранилище (TLS) - это метод компьютерного программирования, который использует статическая или глобальная память, локальная для потока.
Это иногда необходимо, потому что обычно все потоки в процессе совместно использовать одно и то же адресное пространство, что иногда нежелательно.
и
С++ 0x вводит ключевое слово thread_local
. Кроме того, различные С++ реализации компилятора предоставляют конкретные способы объявить нить-локальные переменные:
Sun Studio C/С++, IBM XL C/С++, GNU C и Intel C/С++ (системы Linux) используют синтаксис:
__thread int number;
Visual С++, Intel C/С++ (системы Windows), Borland С++ Builder и Digital Mars С++ используют синтаксис:
__declspec(thread) int number;
Borland С++ Builder также поддерживает синтаксис:
int __thread number;
Итак, пока __thread
существует на практике и на некоторых системах, thread_local
- это новое официальное ключевое слово С++ 0x, которое делает то же самое.
Предпочитайте его нестандартным __thread
всякий раз, когда у вас есть доступ к С++ 0x.
Ответ 3
Ключевое слово называется thread_local
. Это означает, что каждый поток имеет свою собственную версию этой переменной.
Ответ 4
Нет, это не значит, что "что-то связанное с этой переменной будет выполнено с помощью нового потока". Это означает, что будет существовать копия переменной для каждого существующего потока, и каждый поток может видеть только свою собственную копию переменной.