Simulirati prikazani sustav dretvom frizerka te dretvama klijent. Dretvu frizerka te dretve klijent stvara početna (glavna) dretva. Najprije stvori jednu dretvu frizerke, potom po jednu dretvu klijenta svake dvije sekunde. Nakon što je stvoreno 20 dretvi klijenata, glavna dretva označava kraj radnog vremena, ali nakon toga stvara još 3 dretve (svaku nakon 2 sekunde). Frizerka mora odraditi sve klijente iz salona prije nego zatvori salon. Trajanje rada na jednom klijenut simulirati s odgodom od 5 sekundi. Za sinkronizaciju koristiti semafore i dodatne varijable.
def frizerka (): # uđi u kritični odsječak otvoren = True # postavi oznaku OTVORENO ispisi_stanje("frizerka: otvaram salon") # izađi iz kritičnog odsječka while not prekini: # nije zahtjevan prekid izvođenja # uđi u kritični odsječak if len(red) > 0: # ima klijenata # pozovi idućeg klijenta # izađi iz kritičnog odsječka time.sleep(5) elif otvoren: stolac = 0 ispisi_stanje("frizerka: spavam") # izađi iz kritičnog odsječka # spavaj - čekaj da te probude else: stolac = 0 ispisi_stanje("frizerka: zavrsavam s radom") # izađi iz kritičnog odsječka break def klijent (id): # uđi u kritični odsječak if otvoren and len(red) < 3: red.append(id) ispisi_stanje("klijent " + str(id) + ": dosao") if stolac == 0: # probudi frizerku pass # izađi iz kritičnog odsječka # čekaj da te frizerka pozove if prekini: return # uđi u kritični odsječak stolac = id red.remove(id) ispisi_stanje("klijent " + str(id) + ": radi mi frizuru") elif not otvoren: ispisi_stanje("klijent " + str(id) + ": salon zatvoren") else: ispisi_stanje("klijent " + str(id) + ": nema mjesta") # izađi iz kritičnog odsječka
OTVORENO stolac: 0 red: - - - [ frizerka: otvaram salon ] OTVORENO stolac: 0 red: - - - [ frizerka: spavam ] OTVORENO stolac: 0 red: 1 - - [ klijent 1: dosao ] OTVORENO stolac: 1 red: - - - [ klijent 1: radi mi frizuru ] OTVORENO stolac: 1 red: 2 - - [ klijent 2: dosao ] OTVORENO stolac: 1 red: 2 3 - [ klijent 3: dosao ] OTVORENO stolac: 2 red: 3 - - [ klijent 2: radi mi frizuru ] OTVORENO stolac: 2 red: 3 4 - [ klijent 4: dosao ] OTVORENO stolac: 2 red: 3 4 5 [ klijent 5: dosao ] OTVORENO stolac: 2 red: 3 4 5 [ klijent 6: nema mjesta ] OTVORENO stolac: 3 red: 4 5 - [ klijent 3: radi mi frizuru ] OTVORENO stolac: 3 red: 4 5 7 [ klijent 7: dosao ] OTVORENO stolac: 3 red: 4 5 7 [ klijent 8: nema mjesta ] OTVORENO stolac: 4 red: 5 7 - [ klijent 4: radi mi frizuru ] OTVORENO stolac: 4 red: 5 7 9 [ klijent 9: dosao ] OTVORENO stolac: 4 red: 5 7 9 [ klijent 10: nema mjesta ] ZATVORENO stolac: 4 red: 5 7 9 [ main: zatavaram salon ] ZATVORENO stolac: 4 red: 5 7 9 [ klijent 11: salon zatvoren ] ZATVORENO stolac: 5 red: 7 9 - [ klijent 5: radi mi frizuru ] ZATVORENO stolac: 5 red: 7 9 - [ klijent 12: salon zatvoren ] ZATVORENO stolac: 5 red: 7 9 - [ klijent 13: salon zatvoren ] ZATVORENO stolac: 7 red: 9 - - [ klijent 7: radi mi frizuru ] ZATVORENO stolac: 9 red: - - - [ klijent 9: radi mi frizuru ] ZATVORENO stolac: 0 red: - - - [ frizerka: zavrsavam s radom ]