Если у вас всегда есть одна и та же работа для каждого цикла, и вам нужно дождаться окончания всей работы до начала следующего цикла, то вы думаете о правильном решении.
Вам потребуются некоторые объекты синхронизации: «семафор начала кадра», «семафор конца кадра» и «событие конца кадра».Если у вас есть n независимых задач в каждом кадре, запустите n потоков с циклами, которые выглядят следующим образом (псевдокод):
while true:
wait on "start of frame semaphore"
<do work>
enter lock
decrement "worker count"
if "worker count" = 0 then set "end of frame event"
release lock
wait on "end of frame semaphore"
Затем можно запустить поток контроллера:
while true:
set "worker count" to n
increment "start of frame semaphore" by n
wait on "end of frame event"
increment "end of frame semaphore" by n
Это будет хорошо работать для малых п.Если количество задач, необходимых для выполнения каждого цикла, становится большим, то вы, вероятно, захотите использовать пул потоков, связанный с очередью задач, чтобы не перегружать систему потоками.Но с этим решением сложнее, а с многопоточностью - враг.