X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/aac4ba41ea27fe8168bebed009abebd7e5c3f006..4cdc0f888550cbaefe6094ae801230336d005337:/teshsuite/smpi/mpich3-test/rma/lock_nested.c diff --git a/teshsuite/smpi/mpich3-test/rma/lock_nested.c b/teshsuite/smpi/mpich3-test/rma/lock_nested.c new file mode 100644 index 0000000000..58d03fa76f --- /dev/null +++ b/teshsuite/smpi/mpich3-test/rma/lock_nested.c @@ -0,0 +1,52 @@ +/* -*- Mode: C; c-basic-offset:4 ; -*- */ +/* + * (C) 2016 by Argonne National Laboratory. + * See COPYRIGHT in top-level directory. + */ + +#include +#include +#include +#include + +#define BUFSIZE 4 + +/* This program tests nested lock. Process 0 locks the other processes + * one by one, then unlock each of them.*/ + +int main(int argc, char *argv[]) +{ + int rank = 0, nprocs = 0, dst = 0; + int winbuf[BUFSIZE]; + MPI_Win win = MPI_WIN_NULL; + + MPI_Init(&argc, &argv); + MPI_Comm_rank(MPI_COMM_WORLD, &rank); + MPI_Comm_size(MPI_COMM_WORLD, &nprocs); + + memset(winbuf, 0, sizeof(int) * BUFSIZE); + MPI_Win_create(winbuf, sizeof(int) * BUFSIZE, sizeof(int), MPI_INFO_NULL, MPI_COMM_WORLD, &win); + + if (rank == 0) { + /* lock each process */ + for (dst = 0; dst < nprocs; dst++) { + MPI_Win_lock(MPI_LOCK_SHARED, dst, 0, win); + } + + /* unlock each process */ + for (dst = nprocs - 1; dst >= 0; dst--) { + MPI_Win_unlock(dst, win); + } + } + + MPI_Barrier(MPI_COMM_WORLD); + MPI_Win_free(&win); + + if (rank == 0) { + fprintf(stdout, " No Errors\n"); + fflush(stdout); + } + + MPI_Finalize(); + return 0; +}