Problém kritické sekce
Z FAV wiki
[editovat] Časový souběh
Pokud procesy sdílejí společnou paměť, kterou čtou a zapisují, může nastat časový souběh. Hledání časových souběhů v reálných programech není jednoduché, protože časový souběh se obvykle projevuje nedeterministicky a programy běží po většinu času bez problémů.
Příklad - Přístup do souboru
- 2 procesy chtějí vytvořit soubor a zapsat do něj
- 1. proces – zjistí, že soubor není
- ... přeplánování ...
- 2. proces – zjistí, že soubor není, vytvoří a zapíše
- 1. proces – pokračuje, vytvoří a zapíše znehodnotí činnost druhého procesu
Řešení - časový souběh by nenastal, pokud by čtení+modifikace proběhli atomicky, tj. jako jedna nedělitelná operace. Zařídit HW většinou není praktické. SW řešení - v jednom okamžiku dovolíme číst a zapisovat společná data pouze jednomu procesu.
[editovat] Kritická sekce
= místo programu, kde je prováděn přístup ke společným datům
Dobré řešení musí mít 3 vlastnosti:
- Vzájemné vyloučení: žádné 2 procesy nesmějí být současně uvnitř své kritické sekce
- Proces běžící mimo svou kritickou sekci nesmí blokovat jiné procesy
- Žádný proces nesmí na vstup do své kritické sekce čekat nekonečně dlouho