Posted to tcl by mjanssen at Sat Apr 22 20:00:43 GMT 2017view pretty
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