Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Update copyright lines for 2023.
[simgrid.git] / examples / smpi / mc / mutual_exclusion.c
index a917060..0fb0a75 100644 (file)
@@ -1,34 +1,41 @@
+/* Copyright (c) 2014-2023. The SimGrid Team.
+ * All rights reserved.                                                     */
+
+/* This program is free software; you can redistribute it and/or modify it
+ * under the terms of the license (GNU LGPL) which comes with this package. */
+
 #include <stdio.h>
 #include <mpi.h>
 #include <simgrid/modelchecker.h>
+#include <xbt/dynar.h>
 
 #define GRANT_TAG 0
 #define REQUEST_TAG 1
 #define RELEASE_TAG 2
 
 int main(int argc, char **argv){
-
-  int err, size, rank;
+  int size;
+  int rank;
   int recv_buff;
   MPI_Status status;
-  int CS_used = 0;
   xbt_dynar_t requests = xbt_dynar_new(sizeof(int), NULL);
-  
+
   /* Initialize MPI */
-  err = MPI_Init(&argc, &argv);
+  int err = MPI_Init(&argc, &argv);
   if(err !=  MPI_SUCCESS){
     printf("MPI initialization failed !\n");
     exit(1);
   }
 
-  MC_ignore(&(status.count), sizeof(status.count));
+  MC_ignore(&status.count, sizeof status.count);
 
   /* Get number of processes */
-  err = MPI_Comm_size(MPI_COMM_WORLD, &size);
+  MPI_Comm_size(MPI_COMM_WORLD, &size);
   /* Get id of this process */
-  err = MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+  MPI_Comm_rank(MPI_COMM_WORLD, &rank);
 
   if(rank == 0){ /* Coordinator */
+    int CS_used = 0;
     while(1){
       MPI_Recv(&recv_buff, 1, MPI_INT, MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &status);
       if(status.MPI_TAG == REQUEST_TAG){
@@ -36,14 +43,13 @@ int main(int argc, char **argv){
           printf("CS already used. Queue the request.\n");
           xbt_dynar_push(requests, &recv_buff);
         }else{
-          printf("CS idle. Grant immediatly.\n");
+          printf("CS idle. Grant immediately.\n");
           MPI_Send(&rank, 1, MPI_INT, recv_buff, GRANT_TAG, MPI_COMM_WORLD);
           CS_used = 1;
         }
       }else{
         if(!xbt_dynar_is_empty(requests)){
-          printf("CS release. Grant to queued requests (queue size: %lu)",
-              xbt_dynar_length(requests));
+          printf("CS release. Grant to queued requests (queue size: %lu)", xbt_dynar_length(requests));
           xbt_dynar_shift(requests, &recv_buff);
           MPI_Send(&rank, 1, MPI_INT, recv_buff, GRANT_TAG, MPI_COMM_WORLD);
           CS_used = 1;
@@ -57,12 +63,11 @@ int main(int argc, char **argv){
     while(1){
       printf("%d asks the request.\n", rank);
       MPI_Send(&rank, 1, MPI_INT, 0, REQUEST_TAG, MPI_COMM_WORLD);
-    
+
       MPI_Recv(&recv_buff, 1, MPI_INT, 0, MPI_ANY_TAG, MPI_COMM_WORLD, &status);
-    
+
       printf("%d got the answer. Release it.\n", rank);
       MPI_Send(&rank, 1, MPI_INT, 0, RELEASE_TAG, MPI_COMM_WORLD);
-    
     }
   }