使用具有 ThreadStatic 属性的并行扩展。会不会泄漏内存?

2024-06-28

我相当频繁地使用并行扩展,而且我刚刚遇到了一种情况,使用线程本地存储可能是明智的,允许工作线程重用对象。因此,我正在查看 ThreadStatic 属性,该属性将静态字段/变量标记为每个线程具有唯一值。

在我看来,在没有任何 PE 线程重用保证的情况下,将 PE 与 ThreadStatic 属性一起使用是不明智的。也就是说,如果在某种程度上创建和销毁线程,变量(以及它们指向的对象)是否会在线程本地存储中保留一段不确定的时间,从而导致内存泄漏?或者线程存储可能与线程绑定并在线程被处置时被处置?但是,池中仍然可能存在长期存在的线程,并且从线程所使用的各种代码片段中积累线程本地存储。

有没有更好的方法通过PE获取线程本地存储?

谢谢。


我强烈鼓励使用线程本地存储的正常模式,如此描述MSDN 文章 http://msdn.microsoft.com/en-us/library/dd460703.aspx.

当您使用 [ThreadStatic] 时,重要的是线程池线程在终止时是否清除 TLS 变量。 MSDN 文档中没有任何建议表明它不存在。实现起来并不难,只需要调用 TlsFree() API 函数即可。我写了一个小测试应用程序,没有任何泄漏的证据。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用具有 ThreadStatic 属性的并行扩展。会不会泄漏内存? 的相关文章

随机推荐