Управляйте несколькими 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

Решение

Задача ещё не решена.

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

Других решений пока нет …

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