Вероятно, самым простым способом было бы иметь атомно-логическое значение (std::atomic<bool>
на C ++ - говорят) и иметь поток, который находит выходное значение, которое имеет логическое значение true перед выходом.
В дополнение кчто каждый поток делит свою часть массива на части, так что он может сделать замкнутый цикл, ища число в каждой части, затем проверить атомно-логическое значение, а затем повторять, пока не закончитсяподразделы для проверки.(Причина использования частей вместо простой проверки atomic-boolean после каждой итерации одного большого цикла for заключается в том, что даже проверка atomic-boolean будет довольно дорогой из-за проблем с когерентностью кэша, поэтому лучше амортизировать каждуюatomic-boolean-check для большего количества итераций и обменивают немного дополнительной / потраченной впустую работы в обмен на лучший параллелизм)
Идеальный размер для создания каждой части будет тем, что вам нужнополучайте эмпирически, пробуя его с разными размерами, пока не найдете тот, который дает наилучшую производительность.