## symul synch - przyklad
#
source symul_lib.tcl; # ladowanie symulatora
# tworzymy graf komunikacyjny (w tym wypadku cykl)
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}
#% 3 0
fiber create $liczbaWierz run
fiber_iterate {
proc run {} {
global id run kom0 kom1
if {$id==0} {wyslij 1 0}
fiber yield; # oznacza koniec rundy
while {$run} { # zmienna run pozwala zakonczyc dzialanie symulacji!!
if {$kom0!=""} {
set x $kom0
incr x
wyslij 1 $x
}
fiber yield; # oznacza koniec rundy
}
}
}
Inicjalizacja; # koniecznie trzeba to wywolac!!!
proc wizualizacja {} {
_puts "---"
fiber_iterate {_puts "$id: $kom0, $kom1"}
}
# ... do tego miejsca mozna wszystko wykonac
_puts ---; fiber_iterate {_puts "$id, $id_los"}
#set_run 0; fiber yield; set_run 1; fiber restart
#fiber_iterate {set id_los [expr round(rand()*10000)]}
# + restart i zmiana id_los
fiber error
#fiber_dbg_proc 0 run
#fiber_dbg_proc 1 run
fiber yield; runda; wizualizacja; # uruchamiamy runde
exit