Cvičení 4
Témata cvičení
- Problém kuřáků cigaret
Průběh cvičení
Povídali jsme si o problému kuřáků cigaret.
Pro úplnost pár věcí, na které jsme narazili:
- Agent modeluje OS, tedy jeho kód nesmí být nijak závislý na kuřácích, kteří modelují aplikace. Pro představu takto může vypadat kód agenta v Go:
// Agent function places random ingredients on the table func agent() { for { .Wait() // Wait until the table is free agentSem// Randomly select two ingredients to place on the table .Seed(time.Now().UnixNano()) rand:= rand.Intn(3) choice switch choice { case 0: .Println("Agent places tobacco and paper") fmt.Signal() tobaccoSem.Signal() paperSemcase 1: .Println("Agent places tobacco and matches") fmt.Signal() tobaccoSem.Signal() matchesSemcase 2: .Println("Agent places paper and matches") fmt.Signal() paperSem.Signal() matchesSem} } }
- Vadí-li někomu, že základní implementace semaforu pomocí C11atomics využívá aktivní čekání, můžete napsat něco lepšího. V řešení jen potřebuji vidět, že rozumíte použití složených atomických operací, atomický typů, atd.
Úkoly
- Pracujte na druhém zápočtovém úkolu (kuřáci cigaret řešení vlastními semafory).
- Implementujte řešení problémů z přednášky:
- Producenti a konzumenti
- Čtenáři a písaři
- Večeřící filozofové
- Podívejte se do The Little Book of Semaphores na další zajímavé problémy.