У меня есть некоторый параллельный код и пул потоков.
Я отправляю группы заданий для завершения, и мне нужно отправить 15 заданий, скажем, и , когда все 15 завершены , это специальное задание "задание 16" должно быть выполнено.
Вы не можете просто ставить в очередь «задание 16» последним и иметь пул потоков «exec, когда будете готовы», потому что он может запустить exec «задания 16» до того, как задания 13, 14, 15 будут выполнены.
Итак, , вам нужен способ считать. У меня вопрос, , где ответственность принадлежит?
- В коде вызова : Используйте статическую / глобальную переменную, которая увеличивается в конце каждого задания. Вакансии 1-15 до
counter++
. Когда counter == 15
, exec job 16
- В пуле потоков : добавить функциональность в пул потоков для выполнения ", если не отправлено ни одного задания до того, как (отметка времени) останется"
- В обратном вызове : (ответственность за проверку выполнения заданий 1-15, вращение / сон в противном случае)