当你在一个插槽中为线程A分配一些TLS时,你能从线程B访问相同的插槽吗?
它是内部同步的吗?或者它是如何工作的?
发布于 2010-06-26 20:58:05
不,线程本地存储的全部要点是它对线程是本地的-如果您访问不同线程中的相同插槽,您将获得该线程的值,而不是另一个线程的值。
如果您需要在线程之间共享状态,请不要使用线程本地存储。
发布于 2010-06-26 21:10:15
这个术语可能会令人困惑,因为“槽”通常是内存位置或单个位置的比喻。在TLS中,插槽仅仅是线程私有存储中某个位置的一个“名称”。在x86/x84上没有真正的线程本地存储-所有的内存都是全局的-所以系统会根据正在访问它的线程将TLS中的每个“插槽”映射到不同的实际内存位置。同一线程对插槽的请求会导致相同的内存位置-不同线程对同一插槽的访问会导致不同的内存位置。
这样就不需要同步了,因为每个线程看到的是不同的数据。当然,除非你选择在两个不同线程的TLS中存储相同的对象,那就是另一回事了,但那是人为的--共享并不是因为TLS。
https://stackoverflow.com/questions/3123939
复制相似问题