ПАРАЛЛЕЛЬНОЕ ПРОГРАММИРОВАНИЕ
          
        
        
          
            155
          
        
        
          /* если другой процесс уже установил блокировку, проверяем — чья
        
        
          очередь войти в критический участок */
        
        
          if ( lock->turn != cur_proc_id()) {
        
        
          lock->status[cur_proc_id()] = UNLOCKED;
        
        
          while ( lock->turn == other_proc_id());
        
        
          lock->status[cur_proc_id()] = LOCKED; } } }
        
        
          void unlock(lock_t* lock) {
        
        
          lock->status[cur_proc_id()] = UNLOCKED; lock->turn = oth-
        
        
          er_proc_id(); }
        
        
          Как называется такой механизм взаимоисключения?
        
        
          a)
        
        
          семафор; b) монитор; c) алгоритм банкира; d) алгоритм Деккера.
        
        
          20.Защищенная переменная, значение которой можно запрашивать и менять
        
        
          только при помощи специальных операций, называется
        
        
          a)
        
        
          семафор; b) монитор; c) ресурс; d) очередь.
        
        
          21.Следующая программа на MPI запущена на десяти процессах. Какое число
        
        
          будет выведено на процессе с рангом 3?
        
        
          #include "mpi.h"
        
        
          main(argc, argv)
        
        
          int argc;
        
        
          char **argv;
        
        
          {
        
        
          char message[20];
        
        
          int number;
        
        
          int myrank, mysize;
        
        
          MPI_Status status;
        
        
          MPI_Init(&argc, &argv);
        
        
          MPI_Comm_rank(MPI_COMM_WORLD, &myrank);
        
        
          MPI_Comm_size(MPI_COMM_WORLD, &mysize);
        
        
          number = mysize – myrank;
        
        
          if (myrank == 0)    /* code for process zero */
        
        
          {   number = myrank – mysize;
        
        
          strcpy(message,"Hello, there");
        
        
          MPI_Send(message, strlen(message), MPI_CHAR, 1, 99,
        
        
          MPI_COMM_WORLD);
        
        
          MPI_Send(&number, 1, MPI_INT, 1, 88, MPI_COMM_WORLD);
        
        
          }
        
        
          else                /* code for process one */
        
        
          {
        
        
          MPI_Recv(message, 20, MPI_CHAR, 0, 99, MPI_COMM_WORLD,
        
        
          &status);
        
        
          MPI_Recv(&number, 1, MPI_INT, 0, 88, MPI_COMM_WORLD,
        
        
          &status);
        
        
          printf("received :%s:%d\n", message, number);
        
        
          }
        
        
          MPI_Finalize();
        
        
          }