Локальный поток, локальный экземпляр класса? - PullRequest
2 голосов
/ 14 января 2010

Есть ли хороший, независимый от платформы способ реализовать переменную, локальную как для потока, так и для экземпляра класса, т. Е. Если у вас есть T потоков и I классов, у вас есть экземпляры TxI этой переменной? Я использую язык программирования D, версия 2, но хороший не зависящий от языка ответ также был бы полезен.

Вот некоторые ограничения:

  1. Никогда не требует синхронизации. Это исключает использование идентификатора потока преобразования хэш-таблицы в ссылку на переменную в качестве переменной-члена.
  2. Нельзя хранить ссылки, которые следует собирать. Это исключает возможность использования потоковой статической хеш-таблицы, индексируемой экземпляром класса.
  3. Инициализация должна быть ленивой для эффективности. Если поток никогда не обращается к переменной данного экземпляра, он никогда не должен создаваться.

1 Ответ

2 голосов
/ 14 января 2010

Нельзя хранить ссылки, которые следует собирать. Это исключает возможность использования потоковой статической хеш-таблицы, индексируемой экземпляром класса.

Использовать хеш-таблицу со слабыми ссылками. Не помешает сборке мусора и удалит информацию из хеш-таблицы при сборе ключа (экземпляра класса).

...