Используйте флаг waitall, чтобы указать, что вы хотите, чтобы ожидание возвращалось при сигнале любого объекта. Когда ожидание вернется, удалите сигнализируемый объект из массива объектов и снова подождите, пока у вас не будет N (например, 5 в вашем случае) сигнализируемых объектов.