Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

13AMP 8. přednáška Ing. Martin Molhanec, CSc.. Co jsme se naučili naposled RT jazyky RT jazyky Modula Modula Modula II Modula II.

Podobné prezentace


Prezentace na téma: "13AMP 8. přednáška Ing. Martin Molhanec, CSc.. Co jsme se naučili naposled RT jazyky RT jazyky Modula Modula Modula II Modula II."— Transkript prezentace:

1 13AMP 8. přednáška Ing. Martin Molhanec, CSc.

2 Co jsme se naučili naposled RT jazyky RT jazyky Modula Modula Modula II Modula II

3 ADA (1980) Tento jazyk by vyvinut na žádost USA min. obrany Tento jazyk by vyvinut na žádost USA min. obrany Je určen pro velice rozsáhlé projekty, bezpečnost, přenositelnost Je určen pro velice rozsáhlé projekty, bezpečnost, přenositelnost Je velice rozsáhlý Je velice rozsáhlý Modularita, generické moduly Modularita, generické moduly Podpora procesů a synchronizace Podpora procesů a synchronizace

4 ADA (1980) 1. Etapa: 1976, projekt TINMAN, východisko: Pascal, PL/1, Algol68 2. Etapa: 1977, projekt IRONMAN, 4 firmy →yellow, blue, (red, green→vítězové, Pascal zdroj) 3. Etapa: 1978, projekt STEELMAN, 2 firmy→red a green, vítěz green→ADA 4. Etapa: 1980, testování 1983 – ANSI standard 1987 – ISO standard 1995 – ADA95, přidáno klasické OOP

5 moduly -- specifikační část package ZASOBNIK is procedure VLOZ(X: in POLOZKA); procedure ODEBER(X: out POLOZKA); end ZASOBNIK; -- další deklarace -- implementační část package body ZASOBNIK is -- globální deklarace procedure VLOZ(X: in POLOZKA) is begin -- tělo procedury end VLOZ; -- další procedury end ZASOBNIK;

6 procesy -- specifikace task SERVER is entry Request(X: in integer); end SERVER; -- implementace task body SERVER is -- jako u normálního package Použití: Procedure P is A: SERVER; -- další deklarace begin -- tělo procedury end; Zde se spustí všechny deklarované tasky

7 randevous (obecně) PROCES A entryname(arguments); PROCES B accept entryname(arguments) do -- tělo acceptu end entyname;

8 randevous PROCES A POSLI(25); PROCES B accept POSLI(X: in integer) do Y := Y +X; end POSLI;

9 semafor v ADA task CRT is entry PIS; end CRT; task body CRT is beginloop accept PIS do -- zde píši na obrazovku end; end loop; end CRT; Použití: CRT.PIS; specifikace implementace

10 producent - konsument producent task BUFFER.ZAPIS(DATA); konsument task BUFFER.CTI(DATA);

11 task BUFFER is entry ZAPIS(X: in DATA); entry CTI(X: out DATA); end BUFFER; task body BUFFER is -- deklarace bufferu begin loopselect when NENI_PLNY  accept ZAPIS(DATA: in TYPE) do -- zapiš do bufferu end ZAPIS; or when NENI_PRAZDNY  accept CTI(DATA: out TYPE) do -- čti z bufferu end CTI; end select; end loop; end BUFFER; specifikace implementace

12 JAVA (firma SUN, 1995) Jazyk původně určený pro vestavěné systémy. Jazyk původně určený pro vestavěné systémy. Později určen pro Internet, jako jazyk pro vytváření tzv. appletů. Později určen pro Internet, jako jazyk pro vytváření tzv. appletů. Je podobný jazyku C++. Je podobný jazyku C++. Je multiplatformní, překlad do byte code, běh pomocí interpretace prostřednictvím Java Virtual Machine (JVM) Je multiplatformní, překlad do byte code, běh pomocí interpretace prostřednictvím Java Virtual Machine (JVM)

13 JAVA (firma SUN, 1995) Modularita: IMPORT Modularita: IMPORT Objektovost: pouze třídy a objekty! Objektovost: pouze třídy a objekty! Multitask: vlákna, výjimky, monitory Multitask: vlákna, výjimky, monitory

14 Vlákna, 1. způsob public class MYCLASS extends Thread { public void run(){ for(int i=0;i<100;i++){ System.out.println(˝Hello”); }}} 1)Vlákno musí být potomkem třídy Thread. 2)V našem vlákně musí být povinně definována metoda run, která obsahuje vlastní kód vlákna. 3)Vlákno vytvoříme a spustíme takto: MYCLASS MT = new MYCLASS(); MT.start();

15 Vlákna, 2. způsob public class MYCLASS extends XXX implements Runnable { public void run(){ for(int i=0;i<100;i++){ System.out.println(˝Hello”); }}} 1)Vlákno musí implementovat interface Runnable. 2)V našem vlákně musí být povinně definována metoda run, která obsahuje vlastní kód vlákna 3)Vlákno vytvoříme a spustíme takto: Runnable MT = new MYCLASS(); Thread TH = new Thread(MT); TH.start();

16 Metody pro práci s multitaskem MT.sleep(long) – čeká určený počet milisekund MT.sleep(long) – čeká určený počet milisekund MT.start() – spustí vlákno MT.start() – spustí vlákno MT.stop() – zastaví vlákno MT.stop() – zastaví vlákno MT.isActive() – zjistí jestli je vlákno aktivní MT.isActive() – zjistí jestli je vlákno aktivní MT.isAlive() – zjístí zdali vlákno žije MT.isAlive() – zjístí zdali vlákno žije MT.join() – čeká na ukončení vlákna MT.join() – čeká na ukončení vlákna MT.join(long) – join s timeoutem MT.join(long) – join s timeoutem MT.setName(string) – pojmenuje vlákno MT.setName(string) – pojmenuje vlákno MT.getName() – zjistí jméno vlákna MT.getName() – zjistí jméno vlákna MT je nějaké konkrétní vlákno!

17 Metody pro práci s multitaskem Thread.currentThread() – zjistí, které vlákno právě běží Thread.currentThread() – zjistí, které vlákno právě běží Thread.enumerate(pole) – vrátí pole všech vláken Thread.enumerate(pole) – vrátí pole všech vláken Thread.activeCount() – vrátí počet právě běžících vláken Thread.activeCount() – vrátí počet právě běžících vláken Thread je název třídy!

18 Synchronizace 1) způsob – synchronized methods public class UCET { private float BANKA, POKLADNA; public synchronized void DOBANKY(float X){ POKLADNA -= X; BANKA +=X;} public synchronized void DOPOKLADNY(float X){ BANKA -= X; POKLADNA +=X;} } Použití: UCET mujucet = new UCET(); mujucet.DOBANKY(25.4); Vytváří se semafor (LOCK) na objekt mujucet třídy UCET. Tento semafor platí pro všechny synchronized metody!

19 Synchronizace 2) způsob – synchronized block synchronized (OBJEKT){ … } Použití: synchronized (mujucet) { S = mujucet.BANKA + mujucet.POKLADNA; } Vytváří se semafor (LOCK) pro objekt mujucet třídy UCET. Tento semafor se využívá pro přístup k objektu mujucet v tomto programovém bloku kódu. Výhoda je v menším rozsahu platnosti.

20 Další užitečné metody self.wait() – uvolní LOCK a čeká na notify(). self.wait() – uvolní LOCK a čeká na notify(). self.notify() – uvolní vlákno, které má aktivní wait(). self.notify() – uvolní vlákno, které má aktivní wait(). self.notifyAll() – uvolní všechna vlákna, která čekají ve wait(). self.notifyAll() – uvolní všechna vlákna, která čekají ve wait(). Metody nutné pro vytvoření semaforu v Javě. Hned si vysvětlíme. Používají se pouze v bloku synchronized!

21 Semafor v Jávě Public class SEMAFOR { private int SEM = 0; public synchronized void WAIT(){ while (SEM>0) wait(); SEM = 1; } public synchronized void SIGNAL(){ SEM = 0; notify(); }}

22 Semafor v Jávě POUŽITÍ SEMAFOR mujsem = new SEMAFOR(); // vytvoření semaforu … mujsem.WAIT(); … // kritická sekce mujsem.SIGNAL(); …

23


Stáhnout ppt "13AMP 8. přednáška Ing. Martin Molhanec, CSc.. Co jsme se naučili naposled RT jazyky RT jazyky Modula Modula Modula II Modula II."

Podobné prezentace


Reklamy Google