Я разрабатываю многопоточное приложение в C ++, которое управляет системой распределения ресурсов для задач с динамическими зависимостями. Каждая задача требует подмножества ресурсов (например, ядер ЦП, блоки памяти или каналы ввода -вывода) из общего пула, и задачи могут появляться подзадачи, которые создают новые цепочки зависимости во время выполнения. Система использует пул потоков для выполнения задач одновременно, причем каждый поток получает ресурсы через блокировки Mutex. Тем не менее, я сталкиваюсь с тупиками, когда задачи с круговыми зависимостями пытаются приобрести ресурсы. Тупика возникает спорадически, что затрудняет последовательно воспроизводить. Моя цель состоит в том, чтобы обеспечить выполнение без тупика при сохранении высокой параллелистики и минимизации задержки для выполнения задачи. Задачи представлены в виде узлов в направленном ациклическом графике (DAG), и я попытался обнаружить круговые зависимости, используя поиск по глубине (DFS) перед назначением ресурсов. Тем не менее, DFS не сможет поймать подзадаченные временем, которые вводят круговые ожидания. Я также попытался установить тайм -аут для получения ресурсов, но это привело к тому, что задачи не прошли преждевременно, снижая пропускную способность. Я ожидал, что система будет либо предотвратить тупики путем обнаружения/предотвращения круговых зависимостей, либо изящно разрешить их, не жертвуя параллелизмом. Вместо этого приложение висит, когда несколько потоков ожидают до бесконечности ресурсов, удерживаемых другими.
Подробнее здесь: https://stackoverflow.com/questions/795 ... c-task-dep
Задача тупика в системе распределения ресурсов с динамическими зависимостями задач с динамическими задачами ⇐ C++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение