Решение задачи производителя-потребителя с помощью передачи сообщений
Листинг 2.12. Решение задачи производителя-потребителя с помощью N сообщений #define N 100
void producer(void)
{
int item; message m;
while (TRUE) { item = produce_item( );
*/
receive(consumer, &m); build_message(&m, item); send(consumer, &m);
}
}
void consumer(void)
{
int item, i; message m;
for (i = 0; i < N; i++) send(producer, &m); /* отправка N пустых
сообщений */
while (TRUE) {
Если производитель работает быстрее потребителя, все сообщения в конце концов становятся заполненными, ожидая потребителя; производитель должен будет заблокироваться, ожидая возвращения пустого сообщения.
Если потребитель работает быстрее, то получается обратный эффект: все сообщения опустошатся, ожидая, пока производитель их заполнит, и потребитель заблокируется в ожидании заполненного сообщения.Доступно множество вариантов передачи сообщений.
Для начала рассмотрим способ адресации сообщений. Можно присвоить каждому процессу уникальный адрес и адресовать сообщения процессам. Можно также изобрести новую структуру данных, называемую почтовым ящиком. Этот ящик представляет собой место для буферизации конкретного количества сообщений, которое обычно указывается при его создании. При использовании почтовых ящиков в качестве параметров адреса в вызовах send и receive указываются почтовые ящики, а не процессы. Когда процесс пытается послать сообщение заполненному почтовому ящику, он приостанавливается до тех пор, пока из этого почтового ящика не будет извлечено сообщение, освобождая пространство для нового сообщения.При решении задачи производителя-потребителя оба они, и производитель и потребитель, создадут почтовые ящики, достаточные для размещения N сообщений. Производитель станет отправлять сообщения, содержащие реальные данные, в потребительский почтовый ящик. При использовании почтовых ящиков механизм буферизации вполне понятен: в почтовом ящике получателя содержатся сообщения, посланные процессу- получателю, но еще не принятые им.
Другой крайностью при использовании почтовых ящиков является полный отказ от буферизации. При этом подходе, если операция send проводится до операции receive, процесс-отправитель блокируется до завершения операции receive, в это время сообщение может быть непосредственно скопировано с отправителя получателю без использования промежуточной буферизации. А если первой проводится операция receive, получатель блокируется до осуществления операции send. Такую стратегию обычно называют рандеву. Она проще в реализации, чем схема с буферизацией сообщений, но является менее гибкой, поскольку отправитель и получатель должны работать в строго предопределенном режиме.
Передача сообщений широко используется в системах параллельного программирования. В качестве примера можно привести общеизвестную систему передачи сообщений MPI (Message-Passing Interface). Она нашла широкое применение в научных вычислениях. Более подробные сведения об этой системе изложены в трудах Gropp et al., 1994; Snir et al., 1996.
2.3.9.
Еще по теме Решение задачи производителя-потребителя с помощью передачи сообщений:
- 3. Договоры о передаче исключительных прав производителя фонограммы
- 5. Договоры о передаче прав на средства индивидуализации товаров и их производителей
- 7.4.1. Помощь группы в получении сообщений
- ПЕРЕДАЧА АНГЕЛЬСКИХ СООБЩЕНИЙ
- 7.4.1. Помощь группы в получении сообщений
- 7. Каждый школьник – это сложнейший мир проблем и задач. Забота о своевременном решении этих проблем и задач составляет основу строительства новой школы
- ЗАДАЧА: РЕШЕНИЕ
- § 29 Передача и переход прав по обязательствам. – Римская конструкция права передачи. – Облегчение передачи новейшим законодательством. – Передаточная надпись. – Ограничения передачи. – Действие передачи. – Ответственность передатчика и права приобретателя. – Вступление в право кредитора или суброгация. – Русский закон передачи. – Передача заемных писем. – Переход требований к кредиторам.
- § 3. СТРУКТУРА РЕШЕНИЯ ПЕДАГОГИЧЕСКИХ ЗАДАЧ
- Психологические особенности решения задач.
- § 3. Мышление, интуиция, воображение в решении задач
- Правило подчинения общения решению задач правового воспитания.
- ЗАДАНИЯ ДЛЯ САМОСТОЯТЕЛЬНОЙ РАБОТЫ ПО РЕШЕНИЮ ПСИХОЛОГО-ПЕДАГОГИЧЕСКИХ ЗАДАЧ
- Прием достижения момента истины в решении задач разговора.
- юридико-психологические исследования решения разных правоохранительных задач
- § 1. ПОНЯТИЕ О ПЕДАГОГИЧЕСКОЙ ДЕЯТЕЛЬНОСТИ КАК ПРОЦЕССЕ НЕПРЕРЫВНОГО РЕШЕНИЯ ПРОФЕССИОНАЛЬНЫХ ЗАДАЧ
- Специфической особенностью творческих процессов решения задач является присутствие в них интуиции.