Код: Выделить всё
class B{/*...*/};
class A {
/* members */
NON-static thread_local B var; // and a thread_local variable here
ret_t method(/* args */);
};
более крупная (полная) проблема:
Экземпляры A являются общими для всех потоков. B — это некоторый ресурс, необходимый для вызова A::method, и он должен быть независимым по отношению к потокам, чтобы избежать состояния гонки (то есть A::method должен иметь «доступ на запись» к var< /код>). И соответствующие B различны для разных экземпляров A.
Один не совсем удовлетворительный подход, который я придумал, — это иметь некоторый контейнер ( скажем, std::unordered_map), чтобы сохранить каждую переменную, соответствующую каждому потоку для каждого экземпляра. Однако это не ограничивает доступ к переменным в разных потоках и не предотвращает изменение всего контейнера. (Поэтому разработчик должен быть достаточно осторожным и писать безопасный код.)
Я видел несколько сообщений на Ключевое слово java ThreadLocal(?) в SO, но ни один из них, похоже, не дает идеи, которая действительно работает. Есть предложения?
Подробнее здесь: https://stackoverflow.com/questions/418 ... h-instance
Мобильная версия