параллелизм — карта хеширования с одновременными значениями (в C ++)

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

Кроме того, время от времени я хочу отбросить значения, которые не использовались в течение некоторого времени. Я хочу иметь возможность безопасно удалить указатель значения и удалить его из хэш-карты, убедившись, что никто не использует мое значение.

Каков наилучший способ добиться этого (в целом и в C ++)?

1

Решение

Если вы хотите, чтобы люди использовали вашу хеш-карту для получения этих указателей, тогда вы сможете продолжать использовать их, не уведомляя класс вашей хеш-карты о том, что они с ним закончили, тогда хранение общих указателей на хеш-карте является самым простым способом времени. фактическое удаление объекта до того момента, когда последний пользователь объекта завершит его. Затем хеш-карта может в любое время удалить свой общий указатель на объект.

2

Другие решения

Хранить и передавать общие указатели (std::shared_ptr) к вашим объектам. использование std::shared_ptr::use_count способ проверить, сколько указателей используется в данный момент

0

Вы также можете использовать concurrent_hash_map от Библиотека TBB. Он защищает одновременный доступ и время жизни своих элементов с помощью средств доступа (умный указатель с блокировкой)

0