portal Michała Hanćkowiaka
Begin main content
wm withdraw .; wm geom .output 348x512+20+15; wm geom .konsola 588x675+382+15

## przyklad alg asynch
# + dostarcz zamiast wyslij
# + latwiej generowac egzekucje !!!
#

source symul_lib.tcl

set liczbaWierz 20
iterate i $liczbaWierz {
    # petla "iterate i 10" iteruje od 0 do 9
  let i1 $i-1; if {$i1==-1} {let i1 $liczbaWierz-1}
  let i2 $i+1; if {$i2==$liczbaWierz} {let i2 0}
  set sasiedzi($i) "$i1 $i2"
}

fiber create $liczbaWierz {
    dostarcz 1 "Q $id_los"
    fiber switchto main
    while {$run} {
      if {$kom(0)!=""} {
        set x [czytaj 0]
        dostarcz 1 $x
      }
      fiber switchto main
    }
}
InicjalizacjaAsynch

proc wizualizacja {} {
  fiber_iterate {_puts "$id, $id_los, $lider; $kom0, $kom1"}
}

# ... do tego miejsca mozna wszystko wykonac

if 0 {
zakonczFibery; fiber delete
zakonczFibery; fiber restart
fiber error
zaproponuj
pokazKom
set licznikKom
}

fiber error
  #% {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}

fiber switchto 8; pokazKom
fiber switchto 9; pokazKom


_puts ---; iterate i 100 {fiber switchto [expr int(rand()*20)]}; pokazKom


exit

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