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 { agentSem.Wait() // Wait until the table is free // Randomly select two ingredients to place on the table rand.Seed(time.Now().UnixNano()) choice := rand.Intn(3) switch choice { case 0: fmt.Println("Agent places tobacco and paper") tobaccoSem.Signal() paperSem.Signal() case 1: fmt.Println("Agent places tobacco and matches") tobaccoSem.Signal() matchesSem.Signal() case 2: fmt.Println("Agent places paper and matches") paperSem.Signal() matchesSem.Signal() } } }- 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.