Задачка на синхронизацию
Наверное самое простое (но не самое элегантное) решение - использовать кучу мониторов - по количеству членов "параллельных" групп.
Для варианта ABCD и одной "параллельной" группы AB - два монитора monA и monB. Метод А ждёт свободного monA, метод B - monB, соответственно. C и D же должны забирать себе оба монитора.
A работает - занят monA. B может начать работать? - Да, monB не занят. C, D может начать работать? - Нет, monA занят. Ещё один A может начать работать? - Нет, monA занят.
Решение с отдельным семафором для каждого члена "параллельной" группы имеет место быть. Оно рабочее, но не масштабируемое (не вполне и не красиво). Мы от него отказались в пользу командного процессора, который вообще не требует объектов синхронизации, так как полностью, из коробки, контролирует время жизни любой из команд и любых комбинаций оных. Всем спасибо за участие.