Я внедрил высокопроизводительный потокобезопасный компонент, не используя операторов блокировки, только энергозависимый и Взаимоблокированный используются по соображениям производительности.
У меня есть изменчивый член ссылочного типа в классе, который содержит потокобезопасный экземпляр.
Этот экземпляр является потокобезопасным только для нескольких операций, а не для других.
Из-за этого и по соображениям производительности в некоторых случаях я предпочитаю создавать новый экземпляр вместо обновления исходного, и он действительно работает быстрее, особенно потому, что я не использую никаких операторов блокировки.
Таким образом, элемент volatile может быть в любой момент заменен на другой экземпляр, ключевое слово volatile гарантирует, что с этим не будет проблем в многопоточном окружении.
Это, конечно, работает очень хорошо, но единственной проблемой является сборка мусора старых экземпляров. Когда я проверил мой компонент на производительность, я обнаружил, что он слишком много времени тратит на сборку мусора в выпущенных экземплярах.
Теперь я ищу способ утилизации старых экземпляров. Проблема в том, что я не могу просто взять старый экземпляр при замене и просто сбросить его состояние, потому что могут быть другие потоки, которые все еще используют этот экземпляр, и я не могу найти способ (без блокировки), который гарантирует, что никто не использует этот экземпляр больше.
Как я могу гарантировать, что нет потока, использующего старый экземпляр без операторов блокировки? (энергозависимые и блокированные предпочтительны)
Спасибо.