Atomičnost v programu

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")


Vaja