Как реализовать блокировку чтения / записи в C ++ 14

У меня есть структура данных хеш-таблицы, которую я хочу сделать потокобезопасным с помощью блокировки чтения / записи (мое отношение чтения: записи, вероятно, где-то в районе 100: 1).

Я искал, как реализовать эту блокировку с помощью C ++ 11 (такой как метод здесь), но до меня дошло, что можно использовать C ++ 14 shared_lock сделать то же самое. Однако, посмотрев на cppreference Я нашел оба std::shared_lock а также std::unique_lock но я не понимаю, как использовать их вместе (по сравнению с методом Boost, который имеет простые вызовы методов для блокировки как уникально, так и в режиме совместного использования).

Как я могу воссоздать этот относительно простой интерфейс блокировки чтения / записи в C ++ 14, используя только стандартную библиотеку?

1

Решение

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 может быть быстрее.

1

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


По вопросам рекламы [email protected]