portal Michała Hanćkowiaka
Begin main content
wm geom .konsola 593x640+738+5; wm geom .output 330x636+394+5;  wm withdraw .; source ~/tcl/111/dodatki2_kons.tcl;

# 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

uwaga: portal używa ciasteczek tylko do obsługi tzw. sesji...