3 #include <simgrid/modelchecker.h>
20 int main(int argc, char **argv){
29 err = MPI_Init(&argc, &argv);
30 if(err != MPI_SUCCESS){
31 printf("MPI initialization failed !\n");
35 MC_automaton_new_propositional_symbol("r", &predR);
36 MC_automaton_new_propositional_symbol("cs", &predCS);
38 MC_ignore(&(status.count), sizeof(status.count));
40 /* Get number of processes */
41 err = MPI_Comm_size(MPI_COMM_WORLD, &size);
42 /* Get id of this process */
43 err = MPI_Comm_rank(MPI_COMM_WORLD, &rank);
45 if(rank == 0){ /* Coordinator */
46 //for(i=0; i<size-1; i++) {
48 MPI_Recv(&recv_buff, 1, MPI_INT, MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &status);
49 if(status.MPI_TAG == REQUEST_TAG){
51 printf("CS already used.\n");
54 printf("CS idle. Grant immediatly.\n");
55 MPI_Send(&rank, 1, MPI_INT, recv_buff, GRANT_TAG, MPI_COMM_WORLD);
60 printf("CS release. Resource now idle.\n");
66 printf("%d asks the request.\n", rank);
67 MPI_Send(&rank, 1, MPI_INT, 0, REQUEST_TAG, MPI_COMM_WORLD);
72 MPI_Recv(&recv_buff, 1, MPI_INT, 0, MPI_ANY_TAG, MPI_COMM_WORLD, &status);
73 if(status.MPI_TAG == GRANT_TAG && rank == 1){
77 printf("%d got the answer. Release it.\n", rank);
78 MPI_Send(&rank, 1, MPI_INT, 0, RELEASE_TAG, MPI_COMM_WORLD);