c - MPI:程序在 scanf 处挂起

标签 c parallel-processing mpi

我写了一个简单的 MPI 程序。我没有在程序中做任何处理。它只有 MPI 骨架和读取变量的行。但是,该程序在运行时被挂起。它打印一些换行符然后永远挂起。

int main(int argc, char* argv[]) {
    int my_rank; /* rank of process */
    int p; /* number of processes */
    int tag = 0; /* tag for messages */
    long N;
    MPI_Status status; /* return status for receive */

    /* start up MPI */
    MPI_Init(&argc, &argv);

    /* find out process rank */
    MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);

    /* find out number of processes */
    MPI_Comm_size(MPI_COMM_WORLD, &p);


    printf("\nEnter the number of random points to generate: ");
    scanf("%ld", &N);

    if (my_rank == 0) {

    }

    /* shut down MPI */
    MPI_Finalize();

    return 0;
}

最佳答案

如果您正在使用 Eclipse 进行并行编程,那么(很可能)这就是导致问题的原因。
这是PTP中的某种故障。您也可以使用 printf 体验这一点,它仅在您的程序执行完毕或关闭后打印(而不是在程序运行时)。
然后试试从命令行运行您的代码,它将起作用。

如果它仍然挂起或者您没有使用 Eclipse 进行并行编程
然后尝试调用 fflush(stdout)while ((c = getchar()) != '\n' && c != EOF); 在读取用户输入之前刷新所有内容。

关于c - MPI:程序在 scanf 处挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28848998/

相关文章:

mpi - 如何使用MPI组织异步通信?

c - 客户端服务器实现的命名管道-服务器如何区分来自同一客户端的两个请求

c - 为什么我在这个管道上得到垃圾?

c - 无法将 libavformat/ffmpeg 与 x264 和 RTP 同步

matlab - appdata 是否在并行池中的工作人员之间共享?

cluster-computing - 具有超线程的 MPI 主机文件

C 简单拼写检查

matlab - 为什么矩阵乘法在 7 核工作站上比在我的笔记本电脑上运行得慢?

java多个线程同时将随机字节写入文件[只需要建议]

c - 打开 MPI - mpirun 在简单程序上因错误而退出