-module(modlot). -export([samolot/3,lotniskowiec/3,start/0]). samolot(NR,Lotniskowiec,Startuje) -> timer:sleep(random:uniform(1000)+2000), if Startuje == 0 -> io:format("Samolot ~w chce ladowac ~n",[NR]), Lotniskowiec ! {chce_ladowac, self()}, receive {laduj} -> io:format("Samolot ~w wyladowal ~n",[NR]) end, samolot(NR,Lotniskowiec,1); true -> io:format("Samolot ~w chce startowac ~n",[NR]), Lotniskowiec ! {chce_startowac, self()}, receive {startuj} -> io:format("Samolot ~w wystartowal ~n",[NR]) end, samolot(NR,Lotniskowiec,0) end . lotniskowiec(N,K,Akt) -> io:format("Stan lotniskowca: ~w / ~w, a graniczne K wynosi: ~w ~n",[Akt,N,K]), if Akt < K -> receive {chce_ladowac, Samolot} -> Samolot ! {laduj}, lotniskowiec(N,K,Akt+1); {chce_startowac, Samolot} -> Samolot ! {startuj}, lotniskowiec(N,K,Akt-1) end; Akt >= K -> if Akt < N -> receive {chce_startowac, Samolot} -> Samolot ! {startuj}, lotniskowiec(N,K,Akt-1) after 10 -> lotniskowiec(N,K,Akt) end, receive {chce_ladowac, Samolot2} -> Samolot2 ! {laduj}, lotniskowiec(N,K,Akt+1) after 10 -> lotniskowiec(N,K,Akt) end; true -> receive {chce_startowac, Samolot} -> Samolot ! {startuj}, lotniskowiec(N,K,Akt-1) end end end . start() -> Lot = spawn(modlot,lotniskowiec,[10,8,10]), spawn(modlot,samolot,[0,Lot,1]), spawn(modlot,samolot,[1,Lot,1]), spawn(modlot,samolot,[2,Lot,1]), spawn(modlot,samolot,[3,Lot,1]), spawn(modlot,samolot,[4,Lot,1]), spawn(modlot,samolot,[5,Lot,1]), spawn(modlot,samolot,[6,Lot,1]), spawn(modlot,samolot,[7,Lot,1]), spawn(modlot,samolot,[8,Lot,1]), spawn(modlot,samolot,[9,Lot,1]), spawn(modlot,samolot,[10,Lot,0]), spawn(modlot,samolot,[11,Lot,0]) .