8. cvičení - Monitory
Condition Object
import threading
lock = threading.Lock()
condition = threading.Condition(lock)
# Zpracování prvku
with lock:
# Čekáme na až bude podmínka splněna.
while not an_item_is_available():
condition.wait()
get_an_available_item()
# Vygenerování prvku
with lock:
# Zneplatníme podmínku
make_an_item_available()
# Jakmile vložíme prvek do bufferu tak tuto "událost" oznámíme
# Jednomu procesu čekajícímu na podmínce. Pro oznámení všem procesům
# můžeme použít metodu notify_all.
condition.notify()
Úkoly
(Bodovaný) Upravte 2. úkol ze 3. cvičení tak, že k synchronizaci použijete monitory.
Upravte 1. úkol ze 4. cvičení, tak aby vlákno které provede operaci pop na prázdný zádsobník počkalo až jiné vlákno vloží nějaký prvek. Dále proces který vloží prvek na zádsobník musí upřednostit vlákno které chce získat prvek ze zásobníku před vláknem které chce vkládat. K synchronizaci použijte monitory místo semaforů.