# model CONGEST w sciezce... 07.10.2024
# + sciezka dl=y, ilosc danych=b; czas= y+b ?
#
source symul_lib.tcl; # ladowanie symulatora
source symul_graf_lib.tcl; # wizu
set liczbaWierz 4
set sasiedzi(0) {1}
set sasiedzi(1) {0 2}
set sasiedzi(2) {1 3}
set sasiedzi(3) {2}
fiber create $liczbaWierz {
while {$run} {
if {$id==0} {
if {$li!=""} {wyslij 0 [pobierz li]}
} elseif {$id==$liczbaWierz-1} {
if {$kom0!=""} {dolacz li [czytaj 0]}
} else {
if {$kom0!=""} {dolacz li [czytaj 0]}
if {$li!=""} {wyslij 1 [pobierz li]}
}
fiber yield
}
}
Inicjalizacja
fiber_iterate {
proc dolacz {li_ w} {
upvar $li_ li
lappend li $w
}
proc pobierz {li_} {
upvar $li_ li
set r [lindex $li 0]
set li [lrange $li 1 end]
return $r
}
}
proc wizualizacja {} {
_puts "--- $::licznik_rund"; incr ::licznik_rund
fiber_iterate {
if {$id==0} {
_puts "$id, , $kom0; li=$li"
} elseif {$id==$liczbaWierz-1} {
_puts "$id, $kom0, ; li=$li"
} else {
_puts "$id, $kom0, $kom1; li=$li"
}
}
}
# !!! do tego miejsca mozna wszystko wykonac !!!!!!!!!!!!!!!!!!
set_run 0; fiber yield; runda; set_run 1; fiber delete; set licznikKom 0
# usuwanie fiberow
set_run 0; fiber yield; runda; set_run 1; fiber restart; set licznikKom 0
# restart kodu fiberow
fiber error
G::rysujGraf; after idle {wm geom .t 181x494+23+6}
if 1 {
fiber_eval 0 {set li {1 2 3 4 5 6 7}}
fiber_eval 1 {set li {}}
#fiber_eval 2 {set li {8 9 10 11}}
fiber_eval 2 {set li {}}
fiber_eval 3 {set li {}}
.output.t delete 1.0 end
set licznik_rund 0; wizualizacja
}
# + ile rund wymaga zgromadzenie danych w ostat. wierz?
# |li(0)|=7, sc. dlu=3, => 10 rund
# |li(0)|=7, |li(2)|=4, sc. dlu=3, => 12 rund
fiber yield; runda; wizualizacja
exit