Управляйте несколькими unique_locks параллельно

У меня есть произвольное количество слоев данных; каждый соответствует boost::shared_mutex потому что может быть несколько читателей (блокировка его с помощью boost::shared_lock) или писатель (запирая его boost::unique_lock).

Теперь наступает момент, когда я должен уничтожить / воссоздать слои одновременно. Простой способ сделать это было бы boost::unique_lock по одному мьютексу слоя за раз, и когда все они заблокированы, продолжите пакетную операцию.

Но это, конечно, не оптимизировано, потому что mutex1 может быть заблокирован после того, как все другие доступны для блокировки, и в то же время mutex2 может стать недоступным для другого shared_lock и т. д.

"Умнее" было бы создать отдельный поток для unique_lock каждый мьютекс, но я боюсь, что запуск нескольких потоков одновременно приведет к серьезным потерям производительности.

Есть ли стандартный способ для того, чего я хочу достичь? Что-то используя try_lock но который активно не останавливает текущий поток с всегда активным try_lockпетля?

0 ответов

Другие вопросы по тегам