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