why is the below printing only thread 2 ?
module tb;
	initial begin
      $display ("[%0t] Main Thread: Fork join going to start", $time);
		fork
          display (20, "Thread1_0");
          display (30, "Thread1_1");
          display (10, "Thread2");              
		join
      $display ("[%0t] Main Thread: Fork join has finished", $time);
	end
 
  task display (int _time, string t_name);
    #(_time) $display ("[%0t] %s", $time, t_name);
  endtask
endmodule
 
 Simulation Log: 
ncsim> run 
[0] Main Thread: Fork join going to start 
[10] Thread2 
[20] Thread2 
[30] Thread2 
[30] Main Thread: Fork join has finished
             
            
               
               
               
            
           
          
            
            
              In reply to diptishe : 
Because your task has a static lifetime , the arguments have static lifetimes as well. That means there is only one space allocated for the arguments for all concurrent invocations of the tasks. You need to declare the task with an automatic lifetime, making it reentrant .
task automatic display (int _time, string t_name);
 
Tasked defined in classes do not have this problem since they always have automatic lifetimes.
             
            
               
               
               
            
           
          
            
              
                user49  
                
               
                 
              
                  
                    August 5, 2020,  3:23am
                   
                   
              3 
               
             
            
              In reply to diptishe : 
Your task is static and not automatic
  
  
    
  Edit, save, simulate, synthesize SystemVerilog, Verilog, VHDL and other HDLs from your web browser.
   
  
    
    
  
  
 
module tb;
initial begin
$display ("[%0t] Main Thread: Fork join going to start", $time);
fork
display (20, "Thread1_0");
display (30, "Thread1_1");
display (10, "Thread2");
join
$display ("[%0t] Main Thread: Fork join has finished", $time);
end
 task automatic display (int _time, string t_name);
#(_time) $display ("[%0t] %s", $time, t_name);
endtask
endmodule
[0] Main Thread: Fork join going to start
# [10] Thread2
# [20] Thread1_0
# [30] Thread1_1
# [30] Main Thread: Fork join has finished
# exit
 
Ben Cohen 
http://www.systemverilog.us/  ben@systemverilog.us  
For training, consulting, services: contact http://cvcblr.com/home 
SVA Handbook 4th Edition, 2016 ISBN 978-1518681448 
A Pragmatic Approach to VMM Adoption 2006 ISBN 0-9705394-9-5 
Using PSL/SUGAR for Formal and Dynamic Verification 2nd Edition, 2004, ISBN 0-9705394-6-0 
Real Chip Design and Verification Using Verilog and VHDL, 2002 isbn 978-1539769712 
Component Design by Example ", 2001 ISBN 0-9705394-0-1 
VHDL Coding Styles and Methodologies, 2nd Edition, 1999 ISBN 0-7923-8474-1 
VHDL Answers to Frequently Asked Questions, 2nd Edition ISBN 0-7923-8115 
 
 
SVA Alternative for Complex Assertions 
https://verificationacademy.com/news/verification-horizons-march-2018-issue  
SVA: Package for dynamic and range delays and repeats - SystemVerilog - Verification Academy  
SVA in a UVM Class-based Environment 
https://verificationacademy.com/verification-horizons/february-2013-volume-9-issue-1/SVA-in-a-UVM-Class-based-Environment  
Understanding the SVA Engine, 
Verification Horizons  
https://verificationacademy.com/forums/announcements/free-book-component-design-example-…-step-step-process-using-vhdl-uart-vehicle