Tcl 线程:为什么这十行不并行提交?

问题描述 投票:0回答:1
package require Thread

proc multi_thread_job {job_cmds job_thread} {
    set tpool [tpool::create -maxworkers $job_thread]
    set job_idx 1
    set tjobs ""
    foreach job_cmd $job_cmds {
        puts "=== job $job_idx start! ==="
        lappend tjobs [tpool::post -nowait $tpool $job_cmd]
        incr job_idx
    }

    foreach tjob $tjobs {
        tpool::wait $tpool $tjob
    }
    
    tpool::release $tpool
}

set jobs {
    {puts 1;exec sleep 1}
    {puts 2;exec sleep 2}
    {puts 3;exec sleep 3}
    {puts 4;exec sleep 4}
    {puts 5;exec sleep 5}
    {puts 6;exec sleep 6}
    {puts 7;exec sleep 7}
    {puts 8;exec sleep 8}
    {puts 9;exec sleep 9}
    {puts 10;exec sleep 10}
}

multi_thread_job $jobs 5

我认为理想的结果应该同时打印 1,2,3,4,5,然后每秒打印 6,7,8,9,10... 但结果是像串行一样打印 1,2,3,4,5,6,7,8,9,10。

如何修复此 Tcl 代码以获得并行版本?

multithreading tcl threadpool
1个回答
0
投票

我知道如何解决它。 “tpool::post -nowait”这里应该没有“-nowait”!!!

我在下面引用了这个: https://www.tcl.tk/man/tcl/ThreadCmd/tpool.htm#M10

© www.soinside.com 2019 - 2024. All rights reserved.