ПАРАЛЛЕЛЬНОЕ ПРОГРАММИРОВАНИЕ
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();
}