Simona se je spomnila, da so v šoli programirali, in utrnila se ji je zamisel, da bi napisala program za transakcijo prodaje kart. Program bi vseboval dve atomični funkciji – prva bi vrnila množico prostih sedežev v določeni vrsti in druga bi iz vrste zbrisala kupljeni sedež. Z uporabo omenjenih funkcij bi Simona in Peter hkrati videla, kateri sedeži so prosti, in ko bi se eden od njiju odločil za nakup, ga drugi ne bi mogel prekiniti. S tem bi odpravili nesrečno čakanje drug drugega. Če bi imeli le eno vrsto s prostimi sedeži, bi bil program videti nekako takole:
# Skupni vir - obe funkciji se izvajata atomicno # --- # Mnozica sedezev v vrsti vrsta = {1,2,3,4,5,6,7,8,9,10,11,12} # funkcija vrne mnozico prostih sedezev v vrsti def Prosti(): return (vrsta) # funkcija v mnozici sedezev v vrsti zasede sedez b, ce lahko def Kupi(b): if b in vrsta: vrsta.remove(b) return (True) else: return (False) # Glavna funkcija, ki prodaja sedeze v kinu def Prodajalec (kdo): vrsta = Prosti() prazna_mnozica = set() while vrsta != prazna_mnozica: print(kdo + ": prosti sedezi so: " + str(vrsta)) sedez = int(input("Kateri sedez boste kupili? ")) if Kupi(sedez): print("Sedez "+ str(sedez) + " ste dobili.") else: print("Zal je sedez "+ str(sedez) + " ze zaseden.") vrsta = Prosti() print("Vsi sedezi so ze prodani.") # predpostavimo, da se naslednja klica izvedeta vzporedno Prodajalec("Simona") Prodajalec("Peter")
Spodnji diagram prikazuje delovanje programa, kadar želita Peter in Simona prodati isti sedež.
Ničesar ne smemo predpostaviti o hitrosti izvajanja posameznega procesa.
Poskusi odgovoriti na spodnja vprašanja: