问题标签 [thread-local]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - linux内核模块中的线程本地数据
是否可以在 linux 内核模块中创建线程本地数据?
我需要为调用我的模块的每个进程/线程存储一些数据。有没有一种使用线程本地数据的简单方法,还是我必须求助于编写一个使用当前进程的 pid 作为键的哈希映射?
java - Java 缓存线程池和线程本地
我有一个关于 java 和并发的问题。
假设我有一个名为“a”的 ThreadLocal 变量。我使用 CachedThreadPool 来获取新线程。当一个线程被重用时,ThreadLocal 变量 'a' 会发生什么?它保持相同的值(因为它是同一个线程)还是开始为空(好像线程是新的)?
jpa - DAO 中的 ThreadLocal JPA EntityManager
在我的DAO
课程中,我引用了一个EntityManager
. 我想EntityManager
通过使用来访问线程安全ThreadLocal
。
到目前为止,我的尝试只产生了NullPointerException
s,而且我似乎找不到一个像样的例子。
有人可以为我提供一个例子或指出我正确的方向吗?
更新:我已经尝试了 BalusC 的建议,但是当我同时通过 JSF 和 JAX-RS 网络服务访问 DAO 时,我仍然遇到错误:
我正在使用 C3P0,所以我不知道为什么关闭连接是一个问题。
update2:BalusC 的最后一条评论似乎解决了我的问题:At least, you should not have a single instance of the DAO class shared throughout the application. Create a new one on every request.
.net - ThreadLocal<> 和内存泄漏
.Net 4. ThreadLocal<> 实现 IDisposable。但似乎调用 Dispose() 实际上并没有释放对所持有的线程本地对象的引用。
此代码重现了该问题:
线程本地数据存储对大对象的引用。如果没有手动清空引用,GC 不会收集这些大对象。我使用任务管理器来观察内存消耗。我还运行内存分析器。我在收集垃圾后拍了一张快照。分析器显示泄漏的对象是 GCHandle 的根,并在此处分配:
这似乎是 ThreadLocal<> 设计中的一个缺陷。存储所有分配的对象以进行进一步清理的技巧是丑陋的。关于如何解决这个问题的任何想法?
.net - 正则表达式的多线程使用
鉴于 MSDN 的以下内容:
正则表达式对象可以在任何线程上创建并在线程之间共享。
我发现为了性能,使用类时最好不要在线程之间共享Regex
实例。ThreadLocal
请有人解释一下为什么线程本地实例的运行速度大约快 5 倍?
以下是结果(在 8 核机器上):
源代码:
c# - 处理 ThreadLocal 中保存的元素的正确方法是什么?
当您使用ThreadLocal<T>
并T
实现 IDisposable 时,您应该如何处理 ThreadLocal 中保存的成员?
根据 ILSpy,ThreadLocal 的 Dispose() 和 Dispose(bool) 方法是
ThreadLocal 似乎没有尝试对其子成员调用 Dispose。我不知道如何引用它内部分配的每个线程,以便我可以处理它。
我用下面的代码运行了一个测试,这个类永远不会被释放
java - Glassfish 中的 ThreadLocal 内存泄漏
ThreadLocal 会像在 Tomcat 中泄漏一样导致 Glassfish 服务器中的内存泄漏吗?为什么? http://wiki.apache.org/tomcat/MemoryLeakProtection
java - ThreadLocal 与 Tomcat NIO 连接器一起使用是否安全
这只是在我的负载测试期间测试 Tomcat NIO 连接器时想到的。我使用 ThreadLocal 的另外我使用 Spring,我知道它在几个地方也使用了它。
由于 NIO 连接器没有每个连接的线程,我担心如果 ThreadLocal 对象在清理之前与另一个线程共享,可能会导致很难找到错误。但是,我认为这不是问题,因为它不是我能找到的书面警告,也没有发现任何其他关于此的警告。我假设 NIO 连接器对服务于实际请求的线程没有影响。
在我提出这个假设之前,我希望能找到一些具体的证据。
c++ - 为什么编译器不支持 c++11 thread_local 存储?
AFAIK g++ 和 cl 都支持编译器特定的 TL 存储......所以我想知道 C++11 TLS 与他们现在支持的不同吗?
线程本地存储 (TLS) 是给定多线程进程中的每个线程可以分配存储线程特定数据的位置的方法。通过 TLS API([TlsAlloc]、[TlsGetValue]、[TlsSetValue] 和 [TlsFree])支持动态绑定(运行时)线程特定数据。除了现有的 API 实现之外,Win32 和 Visual C++ 编译器现在还支持静态绑定(加载时)每线程数据。
对 VS 11的支持也被列为部分支持。对于 g++,它甚至不在 GCC4.7 中