wm withdraw .; wm geom .output 348x512+20+15; wm geom .konsola 588x675+382+15 ## przyklad alg asynch # + dostarcz zamiast wyslij # + latwiej generowac egzekucje !!! # source symul_lib.tcl set liczbaWierz 20 iterate i $liczbaWierz { # petla "iterate i 10" iteruje od 0 do 9 let i1 $i-1; if {$i1==-1} {let i1 $liczbaWierz-1} let i2 $i+1; if {$i2==$liczbaWierz} {let i2 0} set sasiedzi($i) "$i1 $i2" } fiber create $liczbaWierz { dostarcz 1 "Q $id_los" fiber switchto main while {$run} { if {$kom(0)!=""} { set x [czytaj 0] dostarcz 1 $x } fiber switchto main } } InicjalizacjaAsynch proc wizualizacja {} { fiber_iterate {_puts "$id, $id_los, $lider; $kom0, $kom1"} } # ... do tego miejsca mozna wszystko wykonac if 0 { zakonczFibery; fiber delete zakonczFibery; fiber restart fiber error zaproponuj pokazKom set licznikKom } fiber error #% {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} fiber switchto 8; pokazKom fiber switchto 9; pokazKom _puts ---; iterate i 100 {fiber switchto [expr int(rand()*20)]}; pokazKom exit