У меня есть хэш-карта, от строкового ключа до указателя на потокобезопасный класс. Каждый объект этого класса содержит мьютекс, который я использую для синхронизации между его различными методами.
Кроме того, время от времени я хочу отбросить значения, которые не использовались в течение некоторого времени. Я хочу иметь возможность безопасно удалить указатель значения и удалить его из хэш-карты, убедившись, что никто не использует мое значение.
Каков наилучший способ добиться этого (в целом и в C ++)?
Если вы хотите, чтобы люди использовали вашу хеш-карту для получения этих указателей, тогда вы сможете продолжать использовать их, не уведомляя класс вашей хеш-карты о том, что они с ним закончили, тогда хранение общих указателей на хеш-карте является самым простым способом времени. фактическое удаление объекта до того момента, когда последний пользователь объекта завершит его. Затем хеш-карта может в любое время удалить свой общий указатель на объект.
Хранить и передавать общие указатели (std::shared_ptr
) к вашим объектам. использование std::shared_ptr::use_count
способ проверить, сколько указателей используется в данный момент
Вы также можете использовать concurrent_hash_map от Библиотека TBB. Он защищает одновременный доступ и время жизни своих элементов с помощью средств доступа (умный указатель с блокировкой)