C ++ экспортировать глобальную переменную thread_local в C? - PullRequest
0 голосов
/ 27 июня 2018

Я разрабатываю разделяемую библиотеку с использованием C ++ и хочу, чтобы пользователь включил заголовок C.

Библиотека экспортирует глобальную переменную thread_local, поэтому в заголовке должна быть записана инструкция extern.

И эта переменная может быть изменена только в коде библиотеки (C ++) и только для чтения в коде пользователя (язык C).

Однако в языке C нет ключевого слова thread_local. Итак, есть идеи по этому поводу?

Действительно ли просто extern type variable определенно правильно?

А в случае модификации переменной в C? Все еще работает?

1 Ответ

0 голосов
/ 27 июня 2018

Я предполагаю, что на переменную ссылаются относительно указателя, который хранится в контексте потока. Может быть даже зарегистрироваться. Когда создается поток, данные распределяются, и указатель инициализируется, чтобы указывать на него. (Для контекста всегда будет требоваться место.) Когда процесс переключается с одного потока на другой, текущий контекст сохраняется в другом восстановленном контексте, включая косвенный указатель. Если вы не используете правильный тип, исправление во время соединения не будет правильным, и правильная область памяти не будет использоваться. Я не знаю, будет ли исправление просто ошибочным или компоновщик будет знать тип символа, давая эфиру явную ошибку или просто видя глобал как неопределенный. Т.е. я не знаю, видит ли он его как другой символ, тот же символ, но объявленный с конфликтующими типами, или тот же символ, но будут ли смешанные ссылочные методы нарушать код.

...