C++ C++;线程\类的本地非静态成员?

C++ C++;线程\类的本地非静态成员?,c++,thread-local-storage,class-members,member-variables,C++,Thread Local Storage,Class Members,Member Variables,我试图让一个类线程的一个成员变量成为局部变量。然而,类中的thread\u local似乎也必须是静态的。。?但是static意味着该类的所有实例都共享该变量。我想要它,这样类就可以有不同的实例,但是对于其中的一个成员变量,每个访问该对象的线程都有一个不同的变量 那么,我怎样才能拥有一个可以传递的类对象,并且它的成员变量之一是类的这个实例(这个对象)的thread\u local,但不是类的所有实例(这个类型的所有对象)?关于线程,我很偏执。因此,当我在类中绑定线程相关数据时,我会考虑线程的私有

我试图让一个类线程的一个成员变量成为局部变量。然而,类中的
thread\u local
似乎也必须是
静态的。。?但是
static
意味着该类的所有实例都共享该变量。我想要它,这样类就可以有不同的实例,但是对于其中的一个成员变量,每个访问该对象的线程都有一个不同的变量


那么,我怎样才能拥有一个可以传递的类对象,并且它的成员变量之一是类的这个实例(这个对象)的
thread\u local
,但不是类的所有实例(这个类型的所有对象)?

关于线程,我很偏执。因此,当我在
中绑定线程相关数据时,我会考虑线程的私有用法。然而,在类中拥有“线程本地成员”并非不可能。您必须制作一个
std::map
来实现这一点。(
map
entries是稳定的-因此,这应该是可行的。但是,检索条目、将条目插入map以及从map中删除条目都应该进行保护。)@Scheff的分析和建议是可靠的。我要补充的是,如果性能很重要,并且线程创建环境很简单(例如,您提前知道将创建N个线程,
ThreadLocalData
可以具有相同的生存期),那么您可以拥有
std::array
std::vector{N}
成员(因此连续且CPU缓存友好,使用递增的
int
索引传递线程),甚至是
std::map
Scheff建议的。默认情况下,在生成线程之前构造
ThreadLocalData
s,这样就不需要太多锁定了……这是针对低级容器的,我不能在其中使用其他容器。我可以解决全局问题。OT:请为您的问题指定合适的标记。它们非常重要等等。我检查了你的一些问题,它们都只有“C++”标签。上面@Scheff和Tony Delroy的评论非常好(抱歉,在评论中不能同时提及这两个)实际上,线程局部实例变量虽然方便,但在C++程序的架构中没有意义。实例变量必须存储在某个地方。即使忽略了C++在对象内部存储实例变量的事实,但对于线程局部变量,每个线程创建和销毁操作都必须创建。删除或销毁该变量。