我正在尝试理解静态任务。在这里我理解线程 1、2 和 3 同时发生,并且_time
&t_name
是任务内部的静态变量。当我模拟代码时,我得到:
[0] Main Thread: Fork join going to start
[0] Main Thread: Fork join has finished
[0] Nested fork has finished
[10] Thread2
[20] Thread2
[30] Thread2
但是,后来我想,既然“Thread2”与其他两个线程共享t_name
,那么_time
三个线程的共享内存量是不是应该都是 20?我期望的答案是:
[0] Main Thread: Fork join going to start
[0] Main Thread: Fork join has finished
[0] Nested fork has finished
[20] Thread2
[20] Thread2
[20] Thread2
有人能帮助我理解吗?
module tb;
initial begin
$display("[%0t] Main Thread: Fork join going to start", $time);
fork
begin
fork
print(10, "Thread1");
print(20, "Thread2");
join_none
$display("[%0t] Nested fork has finished", $time);
end
print(30, "Thread3");
join_none
$display("[%0t] Main Thread: Fork join has finished", $time);
end
task print (int _time, string t_name);
#(_time) $display ("[%0t] %s", $time, t_name);
endtask
endmodule