Использование __thread в c ++ 0x - PullRequest
       1

Использование __thread в c ++ 0x

14 голосов
/ 13 августа 2011

Я прочитал, что в C ++ появилось новое ключевое слово: это __thread из того, что я прочитал.

Все, что я знаю, это то, что это ключевое слово используется как ключевое слово static, но ябольше ничего не знаю.Означает ли это ключевое слово, что, например, если переменная была объявлена ​​следующим образом:

__thread int foo;

, тогда все, что связано с этой переменной, будет выполнено с новым потоком?

Ответы [ 4 ]

24 голосов
/ 13 августа 2011

Это thread_local, а не __thread. Используется для определения переменных с продолжительностью хранения потока.

thread_local - это новый спецификатор продолжительности хранения, добавленный в C ++ 0x. Существуют другие сроки хранения: статический , автоматический и динамический .

С по этой ссылке :

локальный поток продолжительность хранения (функция C ++ 11). Переменная выделяется, когда поток начинается, и освобождается, когда поток заканчивается. Каждый поток имеет свой экземпляр переменной. Только переменные, объявленные thread_local, имеют эту продолжительность хранения.


Я думаю, что введение этого ключевого слова стало возможным благодаря введению стандартизированной модели памяти в C ++ 0x:

20 голосов
/ 13 августа 2011

С статья в Википедии "Локальное хранилище потоков" :

Локальное хранилище потоков (TLS) - это метод компьютерного программирования, который использует статическую или глобальную локальную память дляпоток.

Это иногда необходимо, потому что обычно все потоки в процессе используют одно и то же адресное пространство, что иногда нежелательно.

И:

C ++ 0x вводит ключевое слово thread_local.Кроме того, различные реализации компилятора C ++ предоставляют особые способы объявления локальных переменных потока:

Sun Studio C / C ++, IBM XL C / C ++, GNU C и Intel C / C ++ (системы Linux) используют синтаксис:

    __thread int number;

Visual C ++, Intel C / C ++ (системы Windows), Borland C ++ Builder и Digital Mars C ++ используют синтаксис:

    __declspec(thread) int number;

Borland C ++ Builder также поддерживает синтаксис:

    int __thread number;

Итак, хотя __thread существует на практике, а в некоторых системах thread_local - это новое официальное ключевое слово C ++ 0x, которое делает то же самоевещь.

Предпочитайте его нестандартному __thread всякий раз, когда у вас есть доступ к C ++ 0x.

5 голосов
/ 13 августа 2011

Ключевое слово называется thread_local. Это означает, что каждый поток имеет свою версию этой переменной.

2 голосов
/ 13 августа 2011

Нет, не означает, что «все, что связано с этой переменной, будет выполнено с новым потоком». Это означает, что для каждого существующего потока будет копия переменной, и каждый поток может видеть только свою собственную копию переменной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...