Я реализую высокопроизводительный поточно-безопасный компонент без использования операторов блокировки, только по соображениям производительности используются только изменчивые и блокированные.Определяет, когда объект не используется ни одним другим потоком без блокировки?
У меня есть элемент volatile reference-type в классе, который содержит потокобезопасный экземпляр. Этот экземпляр является потокобезопасным только для нескольких операций, а не для другого. Из-за этого и по соображениям производительности, в некоторых случаях я предпочитаю создавать новый экземпляр вместо обновления оригинала, и он действительно работает быстрее, особенно потому, что я не использую никаких операторов блокировки.
Таким образом, изменчивый элемент может быть заменен в любое время на другой экземпляр, ключевое слово volatile гарантирует, что в многопоточной среде проблем не возникнет.
Это, конечно, очень хорошо работает, но единственной проблемой является сбор мусора старых экземпляров. Когда я тестировал свой компонент для повышения производительности, я обнаружил, что он тратит слишком много времени на сборку мусора на выпущенные экземпляры.
Теперь я ищу способ утилизации старых экземпляров. Проблема в том, что я не могу просто взять старый экземпляр при замене и просто сбросить его состояние, потому что могут быть другие потоки, которые все еще используют этот экземпляр, и я не могу найти способ (без блокировки), который гарантирует, что никто, использующий этот экземпляр больше.
Как я могу гарантировать, что нет потока, который использует старый экземпляр без операторов блокировки? (летучие и взаимоблокированные)
Спасибо.
делает, используя блокировку действительно значительно снижает производительность? – ironic
Мне очень нравится это слово «детерминировано», и мне нужно запомнить этот. –
Если вам нужен контроль мелкой зернистости по управлению памятью, управляемое приложение, вероятно, не подходит для правильного пути. Что вы делаете, когда вы блокируете, это штраф за производительность? – GrayWizardx