Procházet otázky :: SZZ na MFF UK

#

- Hlavní strana
- Okruhy
- Projít
- Stáhnout
- Co je potřeba
- Chci přispět
- Kredity

Hledat:

## Prohlížení státnicových textů

### Klasické synchronizační problémy

Problém producent/konzument

Producent vyrába predmety, konzument ich spotrebúva. Medzi nimi je sklad pevnej veľkosti (N). Konzument nemá čo spotrebúvať ak je sklad prázdny; producent prestane vyrábať, ak je sklad plný.

    int N = 100;
    int count = 0;
    void producer(void) {
    int item;
    while(TRUE) {
    produce_item(&item);
    if(count==N) sleep ();
    enter_item(item);
    count++;
    if(count == 1) wake(consumer);
    }
    }
    void consumer(void) {
    int item;
    while(TRUE) {
    if(count==0) sleep ();
    remove_item(&item);
    count--;
    if(count==N-1)
    wake(producer);
    consume_item(&item);
    }
    }

1. Buffer je prázdny, a konzument práve prečítal count, aby zistil, či je rovný nule
2. Preplánovanie na producenta
3. Producent vytvorí item a zvýši count
4. Producent zistí, či je count rovný jednej. Zistí že áno, čo znamená že konzument bol predtým zablokovaný (pretože muselo byť 0), a zavolá wakeup
5. Teraz môže dôjsť k zablokovaniu: konzument sa uspí, pretože si myslí, že nemá čo zobrať; producent bude chvíľu produkovať a dôjde "preplneniu" uspí sa; spí producent aj konzument :o)

Problém obědvajících filosofů

Pět filosofů sedí okolo kulatého stolu. Každý filosof má před sebou talíř špaget a jednu vidličku. Špagety jsou bohužel slizké a je třeba je jíst dvěma vidličkami. Život filosofa sestává z období jídla a období přemýšlení. Když dostane hlad, pokusí se vzít dvě vidličky, když se mu to podaří, nají se a vidličky odloží.

Problém ospalého holiče

Holič má ve své oficíně křeslo na holení zákazníka a pevný počet sedaček pro čekající zákazníky. Pokud v oficíně nikdo není, holič se posadí a spí. Pokud přijde první zákazník a holič spí, probudí se a posadí si zákazníka do křesla. Pokud přijde zákazník a holič už střihá a je volné místo v čekárně, posadí se, jinak odejde.