Здесь необходимо учитывать две разные вещи:
Sync / Asyc определяет поток программы в очереди отправки: использование sync()
приводит к блокировке выполнения в очереди отправки дозадание выполнено;напротив, использование async()
не будет блокировать.
Использование флага .barrier
, однако, влияет на способ выполнения блоков в очереди, в которую они были отправлены (очевидно,это имеет значение только для параллельных очередей):
Блок, представленный с этим флагом, будет действовать как барьер: все другие блоки, которые были отправлены до , барьер закончится, и только после этого барьерблок выполнится. Все блоки, представленные после , барьер не начнут, пока барьер не закончится.