У меня есть структура данных хеш-таблицы, которую я хочу сделать потокобезопасным с помощью блокировки чтения / записи (мое отношение чтения: записи, вероятно, где-то в районе 100: 1).
Я искал, как реализовать эту блокировку с помощью C ++ 11 (такой как метод здесь), но до меня дошло, что можно использовать C ++ 14 shared_lock
сделать то же самое. Однако, посмотрев на cppreference Я нашел оба std::shared_lock
а также std::unique_lock
но я не понимаю, как использовать их вместе (по сравнению с методом Boost, который имеет простые вызовы методов для блокировки как уникально, так и в режиме совместного использования).
Как я могу воссоздать этот относительно простой интерфейс блокировки чтения / записи в C ++ 14, используя только стандартную библиотеку?
C ++ 14 имеет реализацию блокировки чтения / записи std::shared_timed_mutex
.
Примечание: в C ++ 17 добавлен более простой класс std::shared_mutex
, который вы можете использовать, если вам не нужны дополнительные функции синхронизации (например, shared_timed_mutex::try_lock_for
а также shared_timed_mutex::try_lock_until
).
Однако, прежде чем использовать блокировку чтения / записи, помните о потенциально вредные последствия для производительности. В зависимости от ситуации, простой std::mutex
может быть быстрее.