问题标签 [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.

0 投票
3 回答
2179 浏览

multithreading - 我可以使用 pthreads 分配每个线程的索引吗?

我正在为我的项目(Linux、ICC、pthreads)优化一些工具,并希望对此技术有一些反馈,以便为线程分配唯一索引,因此我可以使用它来索引每个线程数据的数组。

旧技术使用基于 pthread id 的 std::map,但我想尽可能避免锁定和映射查找(它会产生大量开销)。

这是我的新技术:

稍后在代码中:

所以:

1) 如果两个线程同时创建,那么第 4 行看起来可能是竞争条件。如果是这样 - 我怎样才能避免这种情况(最好没有锁)?我看不出原子增量在这里有什么帮助。

2)有没有更好的方法来以某种方式创建每线程索引?也许通过以某种方式在线程创建上预先生成 TLS 索引?

0 投票
2 回答
169 浏览

java - 类加载器特定属性

我们开发了一个应用程序容器,它为容器中运行的每个独立应用程序创建一个新的类加载器。当调用特定应用程序时,线程的上下文类加载器将与应用程序的类加载器进行适当的设置。

避免使用 ThreadLocal,是否可以在类加载器中存储属性,这样您就可以直接从类加载器中检索特定于应用程序的属性。

例如,我希望能够在访问上下文类加载器时以某种方式保存然后检索属性:

这可能吗?还是 ThreadLocal 是唯一可行的选择?

0 投票
4 回答
1244 浏览

java - 通过 ThreadLocal “传递参数”好吗?

我正在构建一个 Java 网络库和一个使用它的应用程序。图书馆包括:

  • 一个接口 PacketSocket,它具有发送和接收字节数据包的方法。
  • 它有两种实现,一种通过 TCP,一种通过 UDP。
  • 建立在 PacketSocket 之上的 ObjectConnection 类,将对象序列化为字节数据包。

应用程序在 UDPPacketSocket 之上使用 RequestConnection。UDPPacketSocket 实现的独特之处在于它支持为每个数据包指定是否应保证传送。我希望能够在应用程序中使用,但无法通过 ObjectConnection 和 PacketSocket 接口。

我当然可以为这些接口中的适用方法添加一个布尔保证参数,但是我最终(当有更多 PacketSocket 实现时)必须添加更多仅特定于某些实现而被其他人忽略的参数.

相反,我虽然可以使用 UDPPacketSocket 的静态线程本地属性来做到这一点,如下所示:

您如何看待这样的方法?

0 投票
1 回答
598 浏览

.net - .NET 中的本地可继承线程

.NET 4.0 引入了ThreadLocal<T>类,这很棒。现在,我的应用用例需要类似 Java 的InheritableThreadLocal类。.NET 中有类似的东西吗?如果没有,新线程如何使用父线程的本地变量初始化其线程局部变量?我想我需要使用初始化工厂方法,但不确定要放什么。

0 投票
1 回答
2701 浏览

c# - 内存问题和 ThreadLocal

我注意到ThreadLocal<T>implements IDisposable,这意味着我应该在使用完线程局部变量后处理它。我只是好奇具体的问题是什么以及我应该小心做什么和/或避免做什么。

当线程退出时,线程的本地存储是否会被释放?如果我不处置我的 ThreadLocal 成员,最坏的情况是什么?

如果我有一个全局线程局部(矛盾修饰符?呵呵)变量(或者一个ThreadStatic变量)并且我在 ThreadPool 中的线程上分配这个值怎么办。我是否必须小心取消分配线程本地值,或者这不是问题?

0 投票
2 回答
2768 浏览

java - 在 Java 中共享 ThreadLocal 变量

在我的小型应用程序中,我有两个类的线程——基本上是作者和读者。可以将多个读取器分配给单个写入器。作家通过写入他们的chunkBuffer变量来与读者互动。

现在,我不能完全解决这里的线程安全问题:如果我不将 存储chunkBuffer在静态ThreadLocal变量中,所有阅读器将共享一个 chunkBuffer,这很糟糕。但是,如果我确实将 chunkBuffer 存储在 static 中ThreadLocal,作为单独线程的 writer 将获得自己的 chunkBuffer 副本并将继续写入它,而它写入的任何数据都不会到达读者。你能解释一下这里有什么问题吗?非常感谢。

编辑换句话说,有没有一种方法可以创建一个字段,该字段对于线程子类的每个实例(如 ThreadLocal)都是唯一的,但可以根据需要从其他线程访问?

0 投票
2 回答
2239 浏览

c# - ThreadLocal 属性

如果我们有一个ThreadLocal属性(每个线程都有它的唯一属性),那么哪个是正确的(我们不想使用自动 setter/getter):

一种)

二)

0 投票
2 回答
2424 浏览

asp.net - ASP.NET 中的 ThreadLocal 是否等同于每个请求变量?

ThreadLocal在 ASP.NET 中使用了一个变量HttpHandler。我认为它会导致每个请求产生一个新变量。

我的应用程序中有一些奇怪的行为。何时ThreadLocal在 ASP.NET 页面中创建和处置变量?

如果 ASP.NET 稍后将同一线程用于另一个请求,会发生什么情况?它是否会产生一个新ThreadLocal变量或将使用先前创建的值(与另一个请求一起使用)?

如果ThreadLocal在实际释放线程时释放了变量,那么我的假设在 ASP.NET 中失败(因为线程返回池并且每个请求都不是唯一的)

0 投票
2 回答
1371 浏览

java - 为什么我们要在 spring 中使用自定义范围?什么时候需要?

任何人都可以帮助我理解自定义范围。我浏览了手册和许多在线示例,并了解了它是如何实现的。但是,我仍然不清楚为什么我们需要一个自定义代理,以及为什么我们会去限制 bean 的范围。

正如我所知,对于单例 - 当我们希望将单个 bean 提供给所有引用时,我们使用单例;当我们希望每次引用 bean 时都给出新的引用时,我们使用原型。

现在我对自定义范围的理解是
自定义范围 - 我们使用自定义范围作为两者之间的中间点,我们既不想传递单个引用也不想每次都传递新的引用......但是它更接近我们所在的单例每次都传递同一个 bean,只是从我们的首选位置(例如底层 threadlocal 或 map)。

请帮我弄清楚我的概念。这里的主要问题是为什么要自定义范围?什么时候需要?

0 投票
1 回答
6676 浏览

java - WebApp 中的静态 ThreadLocal 变量 - 是否存在任何安全/性能问题?

我正在我的 Java Web 应用程序中研究和试验 ThreadLocal 变量。我正在使用 ThreadLocal 变量在请求之前存储用户名(从会话中收集),然后在请求之后将其删除。我通过调用 ServletFilter 中的静态实用程序方法来完成此操作。我不简单地从会话中检索用户名的原因是因为我继承了一个具有长时间运行进程的系统,有时运行时间比会话超时允许的时间长。我的想法是在处理请求之前获取用户名并将其存储在 ThreadLocal 变量中,这样即使需要超过 15 分钟,我也可以在整个请求期间访问用户名。

我的问题是:

这种设计是否存在任何安全/性能问题,如果有,什么是更好的解决方案?即使没有任何安全和/或性能问题,也欢迎更好的想法。我的解决方案中的片段如下所示:

这是我的实用程序类,它将在我的过滤器中以及我需要用户名的任何地方调用。

这是我的 servlet 过滤器,用于在请求之前设置用户名(并在请求之后通过 finally 块清除它)。

这是我的 web.xml 配置:

任何想法都非常感谢:)