Monitor (programování)

Monitor je přístup k synchronizaci dvou nebo více úkolů, že použití sdílených zdrojů, obvykle samostatná zařízení (tiskárny) nebo sady proměnných.

V minulosti byly operační systémy redukovány na jednoduchý monitorovací program, který zřetězil provádění jiných (například DOS IBM 360 na konci 60. let). Tento význam je dnes neobvyklý a nemá nic společného se současným významem (synchronizace).

Vzájemné vyloučení

Monitor se skládá z:

Příklady použití monitorů v Javě

Zvažte dvě vlákna, která chtějí navzájem komunikovat. První vlákno odesílá zprávy do druhého vlákna prostřednictvím fronty . Pokud je fronta prázdná, musí druhé vlákno čekat na novou zprávu. Takovou frontu lze implementovat pomocí následujícího kódu:

import java.util.*; public class EchangeMessage { private ArrayList l = new ArrayList(); public void enfiler(Object o) { l.add(o); if(l.size()==1) { try { this.notify(); } catch (IllegalMonitorStateException e) {} } } public Object defiler() { if(l.size()==0) { try { this.wait(); } catch (InterruptedException e){} } Object o = l.get(0); l.remove(0); return o; } public synchronized boolean vide() { return l.isEmpty(); } }
Tato třída používá tři metody.
  • Metoda vlákna přidá data do fronty a pokud byla fronta předtím prázdná, uvolní možnou úlohu, která by počkala.
  • Metoda posouvání načte hodnotu z fronty. Pokud nejsou k dispozici žádná data, bude pozastavena.
  • Prázdná metoda vám umožní zjistit, zda je fronta prázdná.

Je možné učinit následující poznámky týkající se fungování Java ve vztahu k tomuto příkladu:

  • Monitory Java nemají operaci FIFO . To znamená, že to nemusí být nutně úkol, který čekal nejdéle, kdo bude probuzen jako první.
  • Monitory by se měly používat v synchronizovaných blocích. Zámek přidružený k synchronizaci je implicitně vrácen, když je přidržen, a automaticky se obnoví, když se úloha probudí.

Podívejte se také