我想要一个跨进程障碍的简单解决方案。这里的一个解决方案:solution进程间共享内存和pthread_barrier:如何安全?
但是我完全失去了mmap ...第一次尝试,它失败了十次(段错误或死锁)。
我明白我的问题来自同步问题,但我无法找到它。我找到了一个设置mmaped内存的例子(example),但我不确定它适合mmaped的pthread_barrier。
这里我的代码的摘录:
#define MMAP_FILE "/tmp/mmapped_bigdft.bin"
void init_barrier() {
pthread_barrier_t *shared_mem_barrier;
pthread_barrierattr_t barattr;
pthread_barrierattr_setpshared(&barattr, PTHREAD_PROCESS_SHARED);
hbcast_fd = open(MMAP_FILE, O_RDWR | O_CREAT | O_TRUNC, (mode_t)0600);
result = lseek(hbcast_fd, sizeof(pthread_barrier_t)-1, SEEK_SET);
result = write(hbcast_fd, "", 1);
shared_mem_barrier = (pthread_barrier_t*) mmap(0, sizeof(pthread_barrier_t), PROT_READ | PROT_WRITE, MAP_SHARED, hbcast_fd, 0);
if (mpi_rank == 0) {
int err = pthread_barrier_init(shared_mem_barrier, &barattr, host_size);
}
MPI_Barrier(some_communicator);
}
问题:
- 我怀念在MMAP初始化的东西吗?
- 哪个操作应该由所有进程执行,哪个操作应该只有一个?
新问题
这是一种用于管理并行线程屏障safier?或者它们是基于相同的机制?
- shmget的
- 的shm_open
- MMAP
- 另一个
你有指针解释所有这一切吗?你说mmap不是pthread_barrier的最佳选择。 shmget比较好?你有另外一个想法吗? – 2010-12-20 13:52:31