Я ищу ассоциативный контейнер, который обеспечивает безопасное одновременное чтение & доступ на запись при условии, что вы никогда не читаете и не записываете такой же элемент.Конъюнктивные контейнеры C++?
В принципе у меня есть эта установка:
Тема 1: Создать, напиши в контейнер Отправить по сети.
Нить 2: Получите отклик на A, Прочитайте A из контейнера, сделайте некоторую обработку.
Я могу гарантировать, что мы только когда-либо пишем A один раз, хотя мы можем получить несколько ответов для A, которые будут обрабатываться последовательно. Это также гарантирует, что мы никогда не читаем и не пишем A в то же время, так как мы можем получить ответ только на A после его отправки.
Так что в основном я ищу контейнер, в котором запись в элемент не беспорядок с любыми другими элементами. Например, std::map
(или любая другая древовидная реализация) не удовлетворяет этому условию, поскольку его базовая реализация является красно-черным деревом, поэтому любая заданная запись может перебалансировать дерево и взорвать любые одновременные операции чтения.
Я думаю, что std::hash_map
или boost::unordered_set
могут работать для этого, основываясь только на моем предположении, что обычная реализация хеш-таблицы будет удовлетворять моим критериям, но я не уверен, и я не могу найти документацию, которая мне скажет. Кто-нибудь еще пытался использовать их аналогично?
Сладкий, я посмотрю на это. Я бы скорее нашел бесплатную реализацию (я хочу использовать ее на работе), но это единственная параллельная реализация контейнера, которую я видел внутри законной библиотеки (в отличие от кода из какого-то случайного блога). –
Это GPL. Разве это недостаточно свободно? –
Упс. Да, после прочтения веб-сайта он выглядит как бесплатный даже для коммерческого использования, если вы не хотите их пакета поддержки. Кроме того, он не блокируется, он использует мелкозернистую блокировку, но похоже, что он работает очень хорошо, я определенно собираюсь провести сравнительный анализ против того, что я использую сейчас (std :: map с закрытой блокировкой). –