Управляйте несколькими unique_locks параллельно
У меня есть произвольное количество слоев данных; каждый соответствует boost::shared_mutex
потому что может быть несколько читателей (блокировка его с помощью boost::shared_lock
) или писатель (запирая его boost::unique_lock
).
Теперь наступает момент, когда я должен уничтожить / воссоздать слои одновременно. Простой способ сделать это было бы boost::unique_lock
по одному мьютексу слоя за раз, и когда все они заблокированы, продолжите пакетную операцию.
Но это, конечно, не оптимизировано, потому что mutex1
может быть заблокирован после того, как все другие доступны для блокировки, и в то же время mutex2
может стать недоступным для другого shared_lock
и т. д.
"Умнее" было бы создать отдельный поток для unique_lock
каждый мьютекс, но я боюсь, что запуск нескольких потоков одновременно приведет к серьезным потерям производительности.
Есть ли стандартный способ для того, чего я хочу достичь? Что-то используя try_lock
но который активно не останавливает текущий поток с всегда активным try_lock
петля?