线程本地,类实例本地存储?

时间:2010-01-14 01:06:09

标签: multithreading concurrency thread-local d

是否有一种良好的,平台无关的方法来实现一个线程和类实例本地的变量,即如果你有T个线程和我的类实例,你有该变量的TxI实例?我使用的是D编程语言,版本2,但是一个好的语言无关的答案也很有用。

以下是一些限制因素:

  1. 绝不能要求同步。这排除了将散列表映射到作为成员变量的变量引用的线程ID。
  2. 不得保留周围的引用应该是垃圾收集。这排除了由类实例索引的线程局部静态哈希表。
  3. 初始化应该是懒惰的效率。如果一个线程永远不会访问给定实例的变量,那么就永远不应该创建它。

1 个答案:

答案 0 :(得分:2)

  

不得保留那些应该被垃圾收集的引用。这排除了由类实例索引的线程局部静态哈希表。

使用具有弱引用键的哈希表。不会阻止垃圾收集,并且会在收集密钥(类实例)时从哈希表中删除信息。