Монитор (синхронизация)

Монитор — в языках программирования высокоуровневый механизм взаимодействия и синхронизации процессов, обеспечивающий доступ к разделяемым ресурсам.[1] Подход к синхронизации двух или более компьютерных задач, использующих общий ресурс, обычно аппаратуру или набор переменных.

При многозадачности, основанной на мониторах, компилятор или интерпретатор прозрачно для программиста вставляет код блокировки-разблокировки в оформленные соответствующим образом процедуры, избавляя программиста от явного обращения к примитивам синхронизации.

История

Пер Бринч Хансен был первым, кто описал и реализовал мониторы, основывая их на идеях Хоара. Впоследствии Хоар разработал теоретическую основу и показал её эквивалентность семафорам (используя исходную семантику). Впервые воплощён в языке Concurrent Pascal и использован для структурирования межпроцессного взаимодействия в операционной системе Solo.

Взаимоисключительность

Монитор состоит из:

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

Простой пример. Рассмотрим монитор, выполняющий транзакции банковского счёта.

monitor account {
  int balance := 0
  
  function withdraw(int amount) {
    if amount < 0 then error "Счёт не может быть отрицательным"
    else if balance < amount then error "Недостаток средств"
    else balance := balance - amount
  }
  
  function deposit(int amount) {
    if amount < 0 then error "Сумма не может быть отрицательной"
    else balance := balance + amount
  }
}

Инвариант здесь просто утверждает, что баланс должен отразить все прошедшие операции до того, как начнётся новая операция. Обычно это не выражено в коде, но подразумевается и может быть упомянуто в комментариях. Однако, есть языки программирования, такие как Эйфель или D, которые могут проверять инварианты. Блокировка добавлена компилятором. Это делает мониторы безопаснее и удобнее, чем другие подходы, требующие от программиста вручную добавлять операции блокировки-разблокировки, — поскольку программист может забыть добавить их.

Условные переменные

Чтобы избегать состояния активного ожидания, процессы должны сигнализировать друг другу об ожидаемых событиях. Мониторы обеспечивают эту возможность с помощью условных переменных. Когда процедура монитора требует для дальнейшей работы выполнения определённого условия, она ждёт связанную с ним условную переменную. Во время ожидания она временно отпускает мьютекс и выбывает из списка исполняющихся процессов. Любой процесс, который в дальнейшем приводит к выполнению этого условия, использует условную переменную для оповещения ждущего её процесса. Оповещённый процесс захватывает мьютекс обратно и может продолжать.

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

monitor channel {
  int contents
  boolean full := false
  condition snd
  condition rcv

  function send(int message) {
    while full do wait(rcv)   // семантика Mesa: см.ниже
    contents := message
    full := true
    notify(snd)
  }

  function receive() {
    var int received

    while not full do wait(snd)   // семантика Mesa: см.ниже
    received := contents
    full := false
    notify(rcv)
    return received
  }
}

Заметьте, что, поскольку ожидание условия отпускает блокировку, ожидающий процесс должен гарантировать соблюдение инварианта перед тем, как начать ожидание. В примере выше, то же справедливо и для оповещения.

Семантика Хоара и Mesa

В ранних реализациях монитора (известных как семантика Хоара) оповещение условной переменной немедленно активизирует ждущий процесс и восстанавливает блокировку, тем самым гарантируется, что условие всё ещё истинно.

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

В самых современных реализациях (известных как семантика Mesa) оповещение не прерывает работающий процесс, а просто переводит некоторые ждущие процессы в состояние готовности. Оповещающий процесс продолжает держать блокировку до тех пор, пока не выйдет из процедуры монитора. Побочные эффекты этого подхода в том, что оповещающий процесс не обязан соблюсти инвариант перед оповещением, а ожидающий процесс — должен повторно проверить условие, которого он дожидается. В частности, если процедура монитора включает выражение if test then wait(cv), другой процесс может войти в монитор после момента оповещения и изменить значение test до того, как ждущий процесс возобновит работу. Выражение нужно переписать так: while test do wait(cv), чтобы условие было пере-проверено после ожидания.

Реализации также предоставляют операцию «notifyAll», или «broadcast», которая оповещает все процессы, ждущие данное условие. Эта операция полезна, например, когда несколько процессов ждут доступности различных объёмов памяти. Освобождение памяти позволит продолжить работу кого-то из них, но планировщик не может знать, кого именно.

Примерная реализация условной переменной:

conditionVariable {
  int queueSize = 0;
  mutex lock;
  semaphore waiting;
  
  wait() {
     lock.acquire();
     queueSize++;
     lock.release();
     waiting.down();
  }
  
  signal() {
     lock.acquire();
     while (queueSize > 0){
        queueSize--;
        waiting.up();
     }
     lock.release();
  }
}

Применение

Языки программирования, поддерживающие мониторы:

См. также

Примечания

  1. Першиков В. И., Савинков В. М. Толковый словарь по информатике / Рецензенты: канд. физ.-мат. наук А. С. Марков и д-р физ.-мат. наук И. В. Поттосин. — М.: Финансы и статистика, 1991. — 543 с. — 50 000 экз. — ISBN 5-279-00367-0.
  2. Alan Burns, Andy Wellings. Concurrent and Real-Time Programming in Ada. — Cambridge University Press, 2007-07-05. — С. 44. — 476 с. — ISBN 9781139464352.
  3. P. J. Muller. The Active Object System. Design and Multiprocessor Implementation. - ETH Zurich, 2002

Литература

Ссылки


Read other articles:

Our HousePoster serial televisi Our HouseGenreDramaDitulis olehShinji NojimaSutradara Kozo Nagayama Kensaku Sawada Hiromasa Kato Pemeran Mana Ashida Charlotte Kate Fox Koji Yamamoto Seishiro Kato Kokoro Terada Serika Matsuda Mai Watanabe Lagu pembuka愛を止めないで(Ai o tome nai de)[1][2]Penata musikOff CourseNegara asal JepangBahasa asliJepangProduksiLokasi produksiJepangDurasi60 menitRilisJaringan asliFuji TVRilis asli17 April (2016-04-17) –12 Ju...

 

Cultural practices common to Christianity Examples of Christian cultureClockwise from top: Sistine Chapel ceiling, Notre-Dame cathedral in Paris, Eastern Orthodox wedding, Christ the Redeemer statue, Nativity scene Part of a series onChristian culture Christian culture Christian tradition Eastern Christianity Western Christianity Byzantine culture Protestant culture Holidays Mormon culture Cultural Christian Art Christian symbolism Early art Catholic art Lutheran art Church architecture Icons...

 

Yahoo! IndonesiaJenis situsPortal web dan layanan internetBahasaBahasa IndonesiaMarkasJakarta Pusat, DKI Jakarta (hingga 2014)[1]PemilikYahoo! Inc.Tokoh pentingRoy Simangunsong(Mantan CEO)Situs webid.yahoo.comKomersialYaDaftar akunOpsionalDiluncurkan2006 (2006) (terpisah dari Yahoo! Asia)StatusDialihkan ke Yahoo! Search Yahoo! Indonesia adalah edisi Indonesia dari perusahaan internet asal Amerika Serikat Yahoo!. Layanan ini diluncurkan pada tahun 2006 setelah sebelumnya menj...

Sue MeSingel oleh Sabrina Carpenterdari album Singular: Act IDirilis09 November 2018 (2018-11-09)DirekamSeptember 2017StudioSuCasa Recording (Los Angeles, California)GenrePop[1]EDM[2]Durasi2:59LabelHollywoodPencipta Sabrina Carpenter Warren Oak Felder Steph Jones Downtown Trevor Brown William Zaire Simmons ProduserOak FelderKronologi singel Sabrina Carpenter Almost Love (2018) Sue Me (2018) Pushing 20 (2019) Video musikSue Me di YouTube Sue Me adalah lagu yang direkam ole...

 

Pour les articles homonymes, voir Rhombe. Si ce bandeau n'est plus pertinent, retirez-le. Cliquez ici pour en savoir plus. Cet article ne cite pas suffisamment ses sources (décembre 2018). Si vous disposez d'ouvrages ou d'articles de référence ou si vous connaissez des sites web de qualité traitant du thème abordé ici, merci de compléter l'article en donnant les références utiles à sa vérifiabilité et en les liant à la section « Notes et références » En pratique...

 

هذه المقالة يتيمة إذ تصل إليها مقالات أخرى قليلة جدًا. فضلًا، ساعد بإضافة وصلة إليها في مقالات متعلقة بها. (أغسطس 2021) أوديت فولنويدر معلومات شخصية الميلاد 30 يوليو 1933  زيورخ  تاريخ الوفاة 26 فبراير 2021 (87 سنة) [1]  مواطنة سويسرا  الحياة العملية المهنة مؤلف مسائل شطر...

Indikator TCAS, salah satu jenis avionik Avionik berarti peralatan elektronik penerbangan yang mencakup seluruh sistem elektronik yang dirancang untuk digunakan di pesawat terbang. Sistem utamanya meliputi sistem komunikasi, navigasi dan indikator serta manajemen dari keseluruhan sistem. Avionik juga mencakup ratusan sistem yang berada di pesawat terbang dari yang paling sederhana seperti lampu pencari pada helikopter polisi sampai sistem yang kompleks seperti sistem taktikal pada pesawat per...

 

Карл Герланднім. Karl Gerland Народився 14 липня 1905(1905-07-14)[1]Gottsbürend, Трендельбург, Кассель, Кассель, Гессен, НімеччинаПомер 21 квітня 1945(1945-04-21)[1] (39 років)Франкфурт-на-Одері, Третій РейхКраїна  НімеччинаДіяльність політикВідомий завдяки Примусова стерилізація[2]Знан

 

AKB48 (foto tahun 2009) adalah grup idola terlaris di Jepang dan memegang Guinness World Record untuk grup pop terbesar,[1] dengan lebih dari 90 anggota dibagi di antara beberapa tim.Morning Musume (foto tahun 2016), grup idola wanita terlama, memperbarui minat pada idola di tahun 1990-an. Mereka memegang rekor untuk 10 singel teratas berturut-turut untuk artis Jepang manapun.Momoiro Clover Z (foto tahun 2012) menduduki peringkat nomor satu di antara grup idola wanita, menurut survei ...

اضغط هنا للاطلاع على كيفية قراءة التصنيف العظاءة الثقيلةالعصر: الطباشيري المتأخر, 95–90 مليون سنة قك ك أ س د ف بر ث ج ط ب ن ↓   حالة الحفظ أنواع منقرضة المرتبة التصنيفية جنس  التصنيف العلمي النطاق: حقيقيات النوى المملكة: حيوانات الشعبة: الحبليات الشعيبة: الفقاريات غير ...

 

Studio Movie Grill is an American dine-in movie theater chain based in Dallas, Texas. The company's theaters feature a bar and lounge area, with meals that are served in the lounge area or at the theater seat before and during the movie.Studio Movie GrillIndustryEntertainmentFounded1993FoundersBrian SchultzHeadquartersDallas, Texas, U.S.Key peopleTed Croft (CEO)Websitewww.studiomoviegrill.com History Studio Movie Grill was founded in 1993 by Brian Schultz, who served as its CEO for twenty-sev...

 

Фоміних Євген Івановичрос. Фоминых Евгений ИвановичНародження 24 грудня 1906(1906-12-24)КайдановоСмерть 22 травня 1977(1977-05-22) (70 років)МоскваПоховання Ваганьковське кладовище :  Країна  СРСРПриналежність  Радянська арміяВид збройних сил Сухопутні військаРід військ  ...

Play written by Leo Butler For the chewing gum, see Juicy Fruit. Juicy FruitsWritten byLeo ButlerCharacters2 female and 1 maleSubjectMotherhood, the EnvironmentGenreOne Act PlaySettingA cafe, a rainforest Juicy Fruits[1] is a one-act comedy by Leo Butler that was produced by touring theatre company Paines Plough[2] in 2011. The cast featured Denise Hoey and Clare Waugh and it was directed by George Perrin, touring nationally to Oran Mor in Glasgow, Traverse Theatre in Edinburg...

 

Artikel ini sebatang kara, artinya tidak ada artikel lain yang memiliki pranala balik ke halaman ini.Bantulah menambah pranala ke artikel ini dari artikel yang berhubungan atau coba peralatan pencari pranala.Tag ini diberikan pada Januari 2023. Vesperus fuentei Klasifikasi ilmiah Kerajaan: Animalia Filum: Arthropoda Kelas: Insecta Ordo: Coleoptera Famili: Cerambycidae Genus: Vesperus Spesies: Vesperus fuentei Vesperus fuentei adalah spesies kumbang tanduk panjang yang tergolong famili Ceramby...

 

Voce principale: Giochi della IV Olimpiade. Ginnastica a Londra 1908 Individuale Concorso individuale A Squadre Concorso a squadre Le competizioni di ginnastica alla IV Olimpiade furono rappresentate da due eventi che si sono svolti allo Stadio di White City di Londra tra il 14 e il 16 luglio 1908. Indice 1 Partecipanti 2 Eventi 3 Medagliere 4 Fonti 5 Altri progetti 6 Collegamenti esterni Partecipanti Un totale di 327 ginnasti provenienti da 14 nazioni parteciparono alla IV Olimpiade:  B...

Railroad Marconi RailwayVisitor shuttle Route of the railway line (red) and Marconi Wireless Station (blue) highlighted on a modern map[1]TechnicalLine length1+1⁄2 miles (2.4 km)Track gauge2 feet (610 mm) Route map Legend mi (km) 0 (0.0) Locomotive shed Turn table Gate of the site 1½ (2,4) Marconi Wireless Station Turn table The Marconi Railway was a 1+1⁄2 miles (2.4 km) long narrow gauge railway with a gauge of 2 feet (610 mm) at the Marconi Wir...

 

Marvel Comics superhero For other characters named Spider-Woman, see Spider-Woman and Spider Woman (disambiguation). For other characters named Ghost-Spider, see Ghost Rider § The Perfect World. For the ongoing series, see Spider-Gwen. For the film adaptation of this character, see Gwen Stacy (Spider-Verse). Comics character Gwen StacySpider-Woman / Ghost-SpiderTextless cover of Spider-Gwen #0 (November 2015) depicting her first appearance design. Art by Robbi Rodriguez.Publication info...

 

World Wrestling Federation pay-per-view event King of the RingPromotional posterPromotionWorld Wrestling FederationDateJune 25, 1995[1]CityPhiladelphia, Pennsylvania[1]VenueCoreStates Spectrum[1]Attendance16,590[1]Buy rate150,000[2]Tagline(s)Guts & GloryPay-per-view chronology ← PreviousIn Your House 1 Next →In Your House 2 King of the Ring event chronology ← Previous1994 Next →1996 King of the Ring tournament chronology ...

The Manali Wildlife Sanctuary is a wildlife sanctuary in Himachal Pradesh in northern India. The sanctuary starts about 2 km from Manali. It is the catchment of Manalsu khad. A path from Manali log huts and Dhungri temple passes through dense Deodar, Kail, Horse chestnut, Walnut and Maple forests. Musk deer, Monal and Brown bear, Leopard and Snow leopard are some of the common animals seen here. Herds of Ibex are seen migrating in the glacier zone in summers. The area of the sanctuary is abou...

 

الصفحه دى يتيمه, حاول تضيفلها مقالات متعلقه لينكات فى صفحات تانيه متعلقه بيها. لعبه الحب (بالعربى: لعبة الحب)  الصنف فيلم كوميدى[1]،  وفيلم رومانسى[1]  تاريخ الصدور 23 اكتوبر 2006  مدة العرض البلد مصر  اللغه الاصليه اللغه المصريه الحديثه الطاقم البطوله هند ص...

 

Strategi Solo vs Squad di Free Fire: Cara Menang Mudah!