fork download
  1. #include <stdio.h>
  2. #include <mpi.h>
  3. #include <stdlib.h>
  4. #include <unistd.h>
  5.  
  6. #define SIZE 10 // dimensiunea cozii
  7.  
  8. int main(int argc, char *argv[]) {
  9. int rank, size, i;
  10. int queue[SIZE];
  11. int qHead = 0, qTail = 0;
  12.  
  13. MPI_Init(&argc, &argv);
  14. MPI_Comm_rank(MPI_COMM_WORLD, &rank);
  15. MPI_Comm_size(MPI_COMM_WORLD, &size);
  16.  
  17. if (size != 2) {
  18. printf("Numarul de procese trebuie sa fie 2.\n");
  19. MPI_Finalize();
  20. return 1;
  21. }
  22.  
  23. // Producator
  24. if (rank == 0) {
  25. for (i = 0; i < SIZE; i++) {
  26. // Generam o valoare aleatorie pentru a adauga in coada
  27. int item = rand() % 100;
  28.  
  29. // Asteptam pana cand coada este plina
  30. while ((qTail + 1) % SIZE == qHead);
  31. // Adaugam elementul in coada
  32. queue[qTail] = item;
  33. qTail = (qTail + 1) % SIZE;
  34. printf("Producatorul a adaugat elementul %d in coada.\n", item);
  35. sleep(1);
  36. }
  37. }
  38. // Consumator
  39. else if (rank == 1) {
  40. for (i = 0; i < SIZE; i++) {
  41. // Asteptam pana cand coada este goala
  42. while (qTail == qHead);
  43. // Consumam elementul din coada
  44. int item = queue[qHead];
  45. qHead = (qHead + 1) % SIZE;
  46. printf("Consumatorul a consumat elementul %d din coada.\n", item);
  47. sleep(1);
  48. }
  49. }
  50.  
  51. MPI_Finalize();
  52.  
  53. return 0;
  54. }
  55.  
Success #stdin #stdout #stderr 0.28s 40736KB
stdin
Standard input is empty
stdout
Standard output is empty
stderr
Error: unexpected symbol in "int main"
Execution halted