Нельзя преждевременно завершить параллельную конструкцию.OpenMP не имеет никакой конструкции для этого, и он указывает, что у параллельных областей может быть только одна точка выхода (поэтому нет разветвления за пределы области ...).
Я думаю, что единственный (разумный и переносимый) способ сделать этодолжен иметь переменную, которая указывает, завершена ли работа, и должен ли поток регулярно проверять эту переменную (используя атомарные инструкции и / или сбросы для обеспечения правильной видимости).Если переменная указывает на то, что работа выполнена, потоки могут пропустить оставшуюся работу (поместив оставшуюся работу в тело if, которое не разветвляется, если работа выполнена).
Может быть возможнонаписать системный код, который приостанавливает другие потоки и устанавливает их в конец блока (например, манипулирует указателями стека и инструкций ...), но это не кажется очень целесообразным (то есть это, вероятно, очень хрупко).
Если вы расскажете нам немного больше о том, что вы пытаетесь сделать (и зачем вам это нужно), вам может быть легче помочь вам (например, предложив дизайн, который не нужно делатьэто).