Помогите разобраться как реализовать задачу "Спящий парикмахер", используя обмен сообщениями: Send и Recv. Разобрался, как реализовать через Семафоры и Мониторы, но с сообщениями не понимаю :(
Проблема спящего парикмахера - классическая задача паралельного программирования. Проблема заключается в обеспечении того, чтобы парикмахер работал, когда есть клиенты, и отдыхал, когда клиентов нет. У нас есть 1 парикмахер (Процесс 0) и остальные клиенты. Аналогия основана на гипотетической парикмахерской с одним парикмахером. У парикмахера есть одно рабочее место и приемная с несколькими стульями. Когда парикмахер заканчивает подстригать клиента, он отпускает клиента и затем идет в приёмную, чтобы посмотреть, есть ли там ожидающие клиенты. Если они есть, он приглашает одного из них и стрижет его. Если ждущих клиентов нет, он возвращается к своему креслу и спит в нем.
Main:
int size, rank;
std::queue<int> visitors;
MPI_Comm_size(MPI_COMM_WORLD, &size);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
if (rank == 0) {
std::cout << "I am a barber [" << rank << "]" << std::endl;
Barber(visitors);
}
if (rank != 0) {
std::cout << "I'm not a barber [" << rank << "]" << std::endl;
Client(visitors, chairs, rank);
}
Barber:
MPI_Status st;
MPI_Request request;
int num;
while (1) {
if (visitors.size() == 0)
continue;
MPI_Recv(&num, 1, MPI_INT, visitors.front(), MPI_ANY_TAG, MPI_COMM_WORLD, &st);
visitors.pop();
std::cout << "I'm cutting process " << num << std::endl;
std::cout << "There are " << visitors.size() << " people left in the queue" << std::endl;
}
Client:
void Client(std::queue<int>& visitors, int chairs, int rank) {
if (visitors.size() < chairs) {
visitors.push(rank);
MPI_Send(&rank, 1, MPI_INT, 0, 0, MPI_COMM_WORLD);
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Есть программа, ошибку выдает после прохождения функции mat1, при присваивании A[i] значение функции
Есть простейший алгоритм на c++, который заполняет и выводит двухмерный динамический массив числами от 1 до n*m, но не работает с некоторыми...
Как в конструкторе класса инициализировать поле класса, являющееся объектом класса и созданное на стеке? Следующий код вызывает ошибку
Реализовал алгоритм Флойда, но задался вопросом,как сделать помимо вывода матрицы кратчайших путей, ещё и вывод матрицы расстояний, который...