我是 perl 的新手,正在尝试多线程。我期待下面的程序创建所有线程并至少在 5 秒后打印“创建所有线程”,一旦执行并且所有线程都在等待输入值。
use threads;
my @arr = (1,2,3,4);
foreach (@arr) {
sleep(1);
print "\ncreating...\n";
threads->new(\&echo, $_);
print "\ncreated\n";
}
print "\ncreated all the threads\n";
sleep(200); #wait for the threads to finish
sub echo {
my ($thread) = @_;
print "\nthread($thread) Enter the value:\n";
my $value = <>;
print "\nthread($thread) Got value= $value\n";
}
但我得到了关注:
creating...
created
thread(1) Enter the value:
creating...
似乎还没有创建其他 3 个线程,如果我删除 sleep(1),我有时会得到预期的结果,但是涉及 sleep(1),即使等待几分钟,我也会得到上述结果。我可能会错过什么?我认为这是基本的东西,但我无法弄清楚。
更新:
相同的程序在 Linux 上完美运行,Windows 的平台特定问题可能是什么?
更新2:
在同一行上遵循 java 程序在同一个盒子上工作得很好:
import java.io.IOException;
public class MT {
public static void main(String[] args)throws Exception {
for(int i=0;i<4;i++){
Thread.sleep(2000);
new Thread(new Task(i)).start();
}
System.out.println("created all the threads");
Thread.sleep(20000);
}
static class Task implements Runnable{
int i;
public Task(int i) {
super();
this.i = i;
}
@Override
public void run() {
try {
System.out.println("Thread:"+i+" Enter value");
int x= System.in.read();
System.out.println(x);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
我不确定 perl 如何在 Windows 上支持多线程!