Rozproszone_moje_zad/TEMAT_A/zad0_2.tcl

52 lines
1.4 KiB
Tcl

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}
# główny program na każdym wierzchołku/fiberze...
fiber create $liczbaWierz {
if {$id==0} {wyslij 1 0}
fiber yield; # oznacza koniec rundy
while {$run} { # zmienna run pozwala zakonczyć działanie symulacji
if {$kom(0)!=""} {
set x $kom(0)
incr x
wyslij 1 $x
}
fiber yield; # oznacza koniec rundy
}
}
Inicjalizacja; # koniecznie trzeba to wywołać !!!
proc wizualizacja {} {
fiber_iterate {_puts "$id: $kom0, $kom1"}
# petla fiber_iterate iteruje po wszystkich fiberach
# proc wizualizacja wywolujemy z konsoli po kazdej rundzie
}
# !!! do tego miejsca wszystko wykonać !!!!!!!!!!!!!!!!!!!!!
fiber yield; runda; wizualizacja
# wykonuje kolejna runde...
# procedura runda dostarcza wysłane komunikaty
if 0 { # to się czasem przydaje:
set_run 0; fiber yield; runda; set_run 1; fiber delete
# usuwanie fiberów
set_run 0; fiber yield; runda; set_run 1; fiber restart
# restart kodu fiberów
fiber error
# wyświetla stan fiberów ({}, ended, error)
fiber_eval 0 {set id}
# wykonanie kodu w fiberze 0
# UWAGA: fiber_eval wykonuje kod na poziomie globalnym
# "fiber0 eval {set id}" wykonuje kod tam gdzie fiber zostal zamrozony...
}