c - MPI:锁定标准输出——一次 1 个进程?

标签 c synchronization mpi

我想打印出每个进程的整数数组的内容。问题是,由于竞争条件,它变得杂乱无章。

什么是最简单的解决方案?我不想调试。我想显示内容,因为我正在做排序算法。所以显示排序前后很有用。

我在 lock.c 中添加了这个:

#include <stdio.h>
static int lock=0;   //Don't use if timing execution
void capture(int rank) {
    while(lock!=0);
    lock = 1;
    printf("\nCaptured by %d\n", rank);
}
void release() {
    lock = 0;
}

并在打印内容之前调用 capture(),然后在打印之后调用 release()。是的,这是一个类似信号量的 hack。但它不起作用,有什么想法吗?

最佳答案

假设您正在使用收集所有进程的 STDOUT 的 MPI,您可以使用 MPI_Barrier() 来强制执行排序,如下所示:

for( int i = 0; i < size; ++i ) {
    MPI_Barrier( MPI_COMM_WORLD );
    if ( i == rank ) {
         printf( "..." );
    }
 }

当然,这是低效的,但它可能比安排将所有信息发送回 rank 0 更简单一些。

关于c - MPI:锁定标准输出——一次 1 个进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/708739/

相关文章:

C++,mpi : easiest way to create random data

c - 半随机交织器的设计

c - fscanf 不读取文件

c - 标准流和 vfork

python - python的共享和独占命名锁

java - 安卓 java.lang.IllegalMonitorStateException : object not locked by thread before wait()

Javascript - 测量 FPS 并将其与事件同步

使用模数计算

c++ - 使用 MPI/c++ 修改读取的大 .txt 文件?

c++ - 所有进程退出的广播消息(MPI)