C++ 其他线程可以修改线程本地内存吗?

C++ 其他线程可以修改线程本地内存吗?,c++,multithreading,c++11,thread-local,C++,Multithreading,C++11,Thread Local,假设我有以下声明: thread_local std::atomic<void*> local_var; thread_local std::atomic local_var; 是否允许从其他线程修改local\u var?也就是说,如果我将local\u var的地址传递给另一个线程,从那里修改local\u var不会召唤鼻魔吗?是的,允许修改另一个线程的线程局部变量 thread\u local对于变量的含义是,名称引用每个线程中的不同对象,但并不意味着该对象是其线程的私有

假设我有以下声明:

thread_local std::atomic<void*> local_var;
thread_local std::atomic local_var;

是否允许从其他线程修改
local\u var
?也就是说,如果我将
local\u var
的地址传递给另一个线程,从那里修改
local\u var
不会召唤鼻魔吗?

是的,允许修改另一个线程的线程局部变量


thread\u local
对于变量的含义是,名称引用每个线程中的不同对象,但并不意味着该对象是其线程的私有对象。如果您通过变量名称以外的其他内容(即其地址)使变量为人所知,则其他线程可以访问它。

如果是,则“线程本地”是什么意思?这当然是可能的,也是“允许的”,但没有意义。如果您想从另一个线程修改某些内容,首先不要使其成为本地线程。@Damon嗯,这在主/从设计中是有意义的。但除此之外,我看不出有什么问题为什么这不应该起作用。TLS只是在获取变量的方式上有所不同,但它仍然有一个合法且规则的内存位置。@Paranix:事实上,只要您不违反其他规定(例如使用错误类型的指针对其进行别名),它就没有“错”,而且由于TLS是同一个地址空间的一部分,它当然可以工作,也但这毫无意义。这就好比用一把特大的锁把你的秘密日记锁在房间里,然后把钥匙给每个人。如果你不介意其他人阅读你的日记,你就不必把它锁起来。@Damon正如我所说,我提出的一个场景是多个从线程/工作线程,它们必须存储特定于线程的数据,同时与单个主线程共享这些数据。例如,他们正在进行的当前任务。