Rozproszone_moje_zad/TEMAT_A/zad3.tcl

63 lines
1.1 KiB
Tcl

# 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