Я написал многопоточную программу на C, используя MPI для поиска палидромов в массиве двумерных символов. Я запускаю 4 темы. Теперь, когда все потоки завершены, я хочу убить потоки и продолжить последовательную работу? Как мне этого добиться? Код выглядит примерно так:
int main(int argc, char *argv[]) {
// define some varibles
int foo;
// Kick off parallel work
MPI_Init (&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &size);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
if (rank == 0) {
// some work ...
}
if (rank == 1) {
// some work ...
}
if (rank == 2) {
// some work ...
}
if (rank == 3) {
// some work ...
}
MPI_Finalize();
// Here I want to print some results AFTER all threads are finished. E.g deallocate memory etc
printf("Found: %d", foo);
return 0;
}
Вы не понимаете, как работает MPI. MPI не использует потоки, он использует независимые процессы. Каждый процесс выполняет всю основную программу.* Поэтому, если вы хотите, чтобы работал только один процесс, вы поместите условие if (i_am_working_process)
вокруг этого кода.
*сноска: стандарт фактически допускает разные модели, но на практике это так.