Posted to tcl by mjanssen at Sat Apr 22 20:00:43 GMT 2017view raw
- package require Thread
- set allwork {1 2 3 4 5 6 7}
- proc getwork {} {
- puts "[thread::id] distributing work"
- puts $::allwork
- set ::allwork [lassign $::allwork work]
- return $work
- }
- proc start_worker {main} {
- set id [thread::create {
- proc start tid {
- while 1 {
- puts "[thread::id]: Asking for work"
- set work [thread::send $tid getwork]
- if {$work ne {}} {
- puts "[thread::id]: Doing work $work"
- after 1000
- } else {
- puts "[thread::id]: No more work"
- thread::exit
- }
- }
- }
- vwait forever
- }]
- thread::send -async $id [list start $main]
- }
- # start 2 workers
- time [list start_worker [thread::id]] 2
- vwait forever