#operating-system #synchronization #theory #producer-consumer #monitor
Вопрос:
Недавно меня познакомили с концепцией мониторов. Мой профессор сказал: «только один поток за раз может находиться в мониторе». Я не уверен, что понимаю это, вот почему я провел свое исследование. Wikipaideia указывает, что я написал в качестве заголовка. Однако в моей книге говорится, что внутри монитора существуют очереди для потоков, которые ждут , пока не будет выполнено какое-либо определенное условие. Что меня действительно смутило, так это псевдокод, который нам дали в качестве решения проблемы ограниченного буфера с мониторами.
Мой вопрос : если процесс не остановлен ожиданием() внутри монитора, гарантирует ли структура монитора, что нам будет разрешено выполнить весь метод без прерывания переключением контекста или просто так, пока он выполняет метод, который никто другой не производит или потребитель не выполняет свой соответствующий метод?? . Потому что в этом слайде:
Похоже, что мы будим потребителя только в том случае, если буфер был пуст, и мы только что произвели товар.
Каждый раз, когда производитель достигает этой части кода, он создает товар. Почему бы нам не подавать сигнал каждый раз? Я предполагал , что мы (можем) рассмотреть следующее: если буфер не был пуст, то они могут быть «активными» потребителями, ожидающими возобновления, потому что они были прерваны переключением контекста, но затем я подумал, возможно ли это? Возможно ли прерывание внутри метода (не потому, что вас «ждут»), а переключением контекста?
Комментарии:
1. Язык Ada обеспечивает реализацию мониторов Hoare, известных как защищенные объекты. Следующий URL-адрес описывает эту реализацию: adaic.org/resources/add_content/standards/95rat/rat95html/…
2. Нет. Это точка в мониторе, в ней одновременно может выполняться только один поток; поэтому, если в нем выполняется один поток, последующие, пытающиеся войти, должны подождать, пока он уйдет. Это немного незаметно, что
wait()
заставляет вызывающего абонента уйти, а затем позже войти в монитор.