Пример неработающего бита ожидания для нескольких производителей или потребителей - PullRequest
0 голосов
/ 06 января 2019

В книге Эндрю Таненбаума об операционных системах в разделе о проблеме «Потребитель / производитель» он приводит пример системы, состоящей из одного производителя, который вставляет блоки данных в буфер, и потребителя, который их получает, принимая их из буфера. Также есть счетчик, который отслеживает количество блоков данных в буфере. Когда потребитель проверяет, что счетчик равен нулю, он спит. Когда программа производит подтверждение того, что счетчик равен нулю, и помещает некоторые данные в буфер, она отправляет сигнал пробуждения потребителю.

Это может привести к гоночным условиям, хорошо известным способом, и Таненбаум дает возможное решение, используя бит ожидания пробуждения. Если потребитель получает сигнал пробуждения во время пробуждения, бит ожидания пробуждения устанавливается в единицу. Перед сном проверяет бит. Если один, он уменьшает бит до нуля и не спит.

Это решает проблему для одного производителя и одного потребителя. Но Таненбаум утверждает, что, когда задействованы три или более потоков производителя / потребителя, легко вспомнить пример, когда бит ожидания пробуждения не препятствует гоночным условиям.

Я не мог придумать такой пример, и все источники о проблеме производителя / потребителя и семафоров, кажется, избегают одной и той же точки.

Может ли кто-нибудь представить такой пример трех или более процессов (предпочтительно трех), в которых бит ожидания пробуждения не препятствует состоянию гонки?

1 Ответ

0 голосов
/ 06 января 2019

Очевидная проблема здесь в том, что вы имеете дело с примитивными механизмами блокировки, которые ни один компетентный программист не использовал бы в реальной жизни. Любая рационально спроектированная операционная система будет иметь более сложные механизмы блокировки, чем просто установка битов и счетчиков.

В некоторых операционных системах есть менеджер блокировок. Для такой очереди вы можете определить именованную блокировку записи. Все производители и потребители пытаются снять эксклюзивные блокировки записи, и весь описанный вами механизм будет реализован в терминах служб операционной системы.

...