2010-01-14 61 views
2

是否有一個很好的,與平臺無關的方法來實現對線程和類實例都是本地的變量,即如果您有T線程和I類實例,您有該變量的TxI實例?我正在使用D編程語言,版本2,但一個好的語言不可知的答案也是有用的。線程本地,類實例本地存儲?

這裏有一些約束:

  1. 必須不要求同步。這就排除了將一個散列表映射到變量引用的線程ID作爲一個成員變量。
  2. 不得保留引用,應該垃圾收集。這排除了具有由類實例索引的線程本地靜態哈希表。
  3. 初始化應該是懶惰的效率。如果線程從不訪問給定實例的變量,那麼它永遠不會被創建。
+0

不是D2有隱含的線程本地存儲? D1有__thread加Tango/druntime的TLS實現IIRC。 – 2010-01-14 01:12:41

+0

D2有隱式線程局部變量,但僅用於全局變量和靜態變量。 – dsimcha 2010-01-14 01:15:28

+0

druntime TLS如何?可以動態分配嗎? – 2010-01-14 05:49:02

回答

2

不能保持引用,應該垃圾收集。這排除了具有由類實例索引的線程本地靜態哈希表。

使用具有弱引用密鑰的散列表。不會阻止垃圾收集,並且會在收集密鑰(類實例)時從哈希表中刪除信息。

+0

體面的想法,除了D現在沒有弱引用。 – dsimcha 2010-01-14 01:14:56

+0

它有終結者嗎? – 2010-01-14 01:45:29

+0

@Anon:是的,D確實有終結者。 – dsimcha 2010-01-14 03:11:14