私はプロセス間の障壁のための簡単な解決策が必要でした。ここで解決策:solutionプロセス間の共有メモリとpthread_barrier:どのように安全ですか?
しかし、私は完全にmmapで失われています...私の最初の試行では、10回中1回失敗します(セグメンテーションまたはデッドロック)。
私は自分の問題が同期の問題であると理解していますが、見つけられません。私は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の初期化中に何かを欠場か?
- どの操作をすべてのプロセスで実行する必要がありますか? pthreadの障壁を管理するためのSAFIERある
新しい問題
?あるいは、彼らは同じメカニズムに基づいていますか?
- たshmget
- 場合、shm_open
- のmmap
- 別の1
すべてのことを説明するポインタがありますか?あなたは、mmapはpthread_barrierには最適ではないと言いました。 shmgetは良いですか?別に覚えていますか? –