Подтвердить что ты не робот

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

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

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

__thread int foo;

то что-нибудь связанное с этой переменной будет выполнено с помощью нового потока?

4b9b3361

Ответ 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

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