потокобезопасность отправки MPI с использованием потоков, созданных с помощью std :: async

В соответствии сэтот сайт, использованиеMPI::COMM_WORLD.Send(...) Поток безопасен. Однако в моем приложении я часто (не всегда) сталкиваюсь с тупиками или получаю ошибки сегментации. Включая каждый вызовMPI::COMM_WORLD методы сmutex.lock() а такжеmutex.unlock() последовательно удаляет взаимоблокировки, а также ошибки по умолчанию.

Вот как я создаю темы:

const auto communicator = std::make_shared();
std::vector handles;
for ( size_t i = 0; i < n; ++i )
{
   handles.push_back(std::async(std::launch::async, foo, communicator));
}
for ( size_t i = 0; i < n; ++i )
{
   handles[i].get();
}

Communicator это класс, который имеетstd::mutex член и исключительно вызывает методы, такие какMPI::COMM_WORLD.Send() а такжеMPI::COMM_WORLD.Recv(), Я не использую другие методы отправки / получения с MPI.foo занимаетconst std::shared_ptr & в качестве аргумента.

Мой вопрос: является ли безопасность потоков, обещанная MPI, несовместимой с потоками, созданными?std::async

Ответы на вопрос(2)

Ваш ответ на вопрос