Как я могу иметь нестатическую локальную переменную потока для каждого экземпляраC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как я могу иметь нестатическую локальную переменную потока для каждого экземпляра

Сообщение Anonymous »

Сама проблема:

Код: Выделить всё

class B{/*...*/};
class A {
/* members */
NON-static thread_local B var; // and a thread_local variable here
ret_t method(/* args */);
};
Я хочу, чтобы var существовал независимо в каждом потоке и каждом экземпляре.

более крупная (полная) проблема:

Экземпляры A являются общими для всех потоков. B — это некоторый ресурс, необходимый для вызова A::method, и он должен быть независимым по отношению к потокам, чтобы избежать состояния гонки (то есть A::method должен иметь «доступ на запись» к var< /код>). И соответствующие B различны для разных экземпляров A.

Один не совсем удовлетворительный подход, который я придумал, — это иметь некоторый контейнер ( скажем, std::unordered_map), чтобы сохранить каждую переменную, соответствующую каждому потоку для каждого экземпляра. Однако это не ограничивает доступ к переменным в разных потоках и не предотвращает изменение всего контейнера. (Поэтому разработчик должен быть достаточно осторожным и писать безопасный код.)



Я видел несколько сообщений на Ключевое слово java ThreadLocal(?) в SO, но ни один из них, похоже, не дает идеи, которая действительно работает. Есть предложения?

Подробнее здесь: https://stackoverflow.com/questions/418 ... h-instance
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»