Ключевые слова "Shared" и "__gshared" в D - PullRequest
9 голосов
/ 29 января 2011

Когда не используется внутри контекста static (то есть, когда ключевое слово static отсутствует и вы не находитесь в глобальной области видимости), что делают shared и__gshared ключевые слова делают?

Примеры:

struct Temp
{
       shared int i;
    __gshared int j;
}

Ответы [ 2 ]

4 голосов
/ 29 января 2011

Общий int набирается shared(int), который не делает ничего, но дает ему этот тип.__gshared int не используется - DMD любит игнорировать атрибуты без операции.

3 голосов
/ 12 апреля 2012

D2 по умолчанию - локальное хранилище потоков, а C, C ++ и D1 - глобальное хранилище.

Одно из отличий заключается в том, что глобальная переменная в D видна другим потокам, а TLS - нет.

Это может показаться не так много, но попробуйте подключиться к библиотеке C, не осознаваяэтот.(неизменным является также. global)

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

могут быть другие варианты использования, но я невидел любой.

Примером может служить глобальная переменная в заголовке C.Если вы попытаетесь взаимодействовать с ним, вам понадобится неизменный или __gshared.Конечно, есть и другие способы, но это, вероятно, самый простой.

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