У меня есть экземпляр класса, к которому можно получить доступ несколькими потоками.Образец шаблона многопоточности
Внутри этого класса находится переменная [ThreadStatic]
, в которой хранятся различные объекты.
Теперь мне нужен второй экземпляр моего класса, и я хочу, чтобы в нем было отдельное хранилище объектов.
В настоящее время два экземпляра в одном потоке будут совместно использовать одно и то же хранилище объектов. Я не хочу это.
Единственное решение, которое я могу думать:
Есть статический IDictionary<int, TObjectStore>
где int
является идентификатор потока, и получить доступ к этому с помощью некоторого метода или геттер:
static TObjectStore ObjectStore {
get {
// create the instance here if its the first-access from this thread, with locking etc. for safety
return objectStore[Thread.CurrentThread.Id];
}
}
Проблема с этим, хотя как я могу избавиться от TObjectStore
для конкретного потока, когда он заканчивается? Я думаю, что я правильно предполагаю, что с моей текущей реализацией GC просто подберет ее?
Благодаря
TIL о 'ThreadLocal <>' –