# inicjalizacja load ./q3.so source symul_lib.tcl # ustawienie ringu set liczbaWierz 5 set sasiedzi(0) {4 1} set sasiedzi(1) {0 2} set sasiedzi(2) {1 3} set sasiedzi(3) {2 4} set sasiedzi(4) {3 0} proc reverse li { set len [llength $li] iterate i $len {lappend wynik [lindex $li [expr {$len-$i-1}]]} set wynik } fiber create $liczbaWierz { set lider ? wyslij 0 "$id_los 0 0" wyslij 1 "$id_los 0 0" fiber yield while {$run} { algorytm [czytaj 0] [czytaj 1] fiber yield } } Inicjalizacja; proc wizualizacja {} { _puts --- fiber_iterate {_puts "id: $id, wartosc: $id_los, lider: $lider; $kom0, $kom1"} } fiber_iterate { # + ta procedura jedynie przekazuje komunikaty... proc algorytm {m0 m1} { global id id_los stopien lider if {$m0!=""} { foreach {id0 i0 l0} $m0 break incr i0 wyslij 1 "$id0 $i0 0"; } if {$m1!=""} { foreach {id1 i1 l1} $m1 break incr i1 set i1 [expr {$i1+1}] if {$m1==$id}{ set lider 1; } wyslij 0 "$id1 $i1 0" } } } fiber yield; runda; wizualizacja; set licznikKom