wm withdraw .; wm geom .output 348x512+20+15; wm geom .konsola 588x675+382+15 ## przyklad alg asynch # + narzedzia do generowania egzekucji # + czytajKomTypu typ nr_pol; # moze byc "*" # komunikaty postaci {typ ...} # 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 { set lider {} wyslij 1 "LE $id_los" while {$run} { set id0 [lindex [czytajKomTypu LE 0] 1] if {$id0>$id_los} { wyslij 1 "LE $id0" } elseif {$id0==$id_los} { set lider 1; wyslij 1 "LE -1" } elseif {$id0==-1 && $lider=={}} { set lider 0; wyslij 1 "LE -1" } } } 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 switchto 8; pokazKom dostarczKom 9 0; pokazKom # + tworzymy egzekucjÄ™ recznie iterate i 100 {fiber switchto [expr {int(rand()*$liczbaWierz)}]} pokazKom zaproponuj _puts ---; pokazKom exit