|HOME |ABOUT |ARTICLES |ACK |FEEDBACK |TOC |LINKS |BLOG |JOBS |


Tutorials



FORK CONTROL

Wait Fork Statement

The wait fork statement is used to ensure that all immediate child subprocesses (processes created by the current process, excluding their descendants) have completed their execution.

EXAMPLE
  program main();

   initial begin
    #(10);
       $display(" BEFORE fork  time = %0d ",$time ); 
       fork
           begin
               # (20);
               $display(" time = %0d # 20  ",$time );
           end
           begin
               #(10);
               $display(" time = %0d # 10  ",$time );
           end
           begin
               #(5);
               $display(" time = %0d # 5  ",$time );
           end
         join_any
    $display(" time = %0d Outside the main fork ",$time );
   end 
   endprogram

RESULTS

 BEFORE fork  time = 10
 time = 15 # 5  
 time = 15 Outside the main fork


 In the above example, Simulation ends before the #10 and #20 gets executed. In some situations, we need to wait until all the threads got finished to start the next task. Using wait fork, will block the  till all the child processes complete.

  
EXAMPLE:
   program main();

   initial begin
    #(10);
       $display(" BEFORE fork  time = %0d ",$time ); 
       fork
           begin
               # (20);
               $display(" time = %0d # 20  ",$time );
           end
           begin
               #(10);
               $display(" time = %0d # 10  ",$time );
           end
           begin
               #(5);
               $display(" time = %0d # 5  ",$time );
           end
         join_any
    $display(" time = %0d Outside the main fork ",$time );
    wait fork ;
    $display(" time = %0d  After wait fork ",$time );

   end 
   endprogram
RESULTS

 BEFORE fork  time = 10
 time = 15 # 5  
 time = 15 Outside the main fork
 time = 20 # 10  
 time = 30 # 20  
 time = 30  After wait fork


Disable Fork Statement


The disable fork statement terminates all active descendants (subprocesses) of the calling process.

In other words, if any of the child processes have descendants of their own, the disable fork statement shall terminate them as well. Sometimes, it is required to kill the child processes after certain condition.

EXAMPLE
   program main();

   initial begin
    #(10);
       $display(" BEFORE fork  time = %0d ",$time ); 
       fork
           begin
               # (20);
               $display(" time = %0d # 20  ",$time );
           end
           begin
               #(10);
               $display(" time = %0d # 10  ",$time );
           end
           begin
               #(5);
               $display(" time = %0d # 5  ",$time );
           end
         join_any
    $display(" time = %0d Outside the main fork ",$time );
   end 

   initial
   #100 $finish;
   endprogram
RESULTS

 BEFORE fork  time = 10
 time = 15 # 5  
 time = 15 Outside the main fork
 time = 20 # 10  
 time = 30 # 20  


In the following example, disable for kills the threads #10 and #20.

EXAMPLE
   program main();

   initial begin
    #(10);
       $display(" BEFORE fork  time = %0d ",$time ); 
       fork
           begin
               # (20);
               $display(" time = %0d # 20  ",$time );
           end
           begin
               #(10);
               $display(" time = %0d # 10  ",$time );
           end
           begin
               #(5);
               $display(" time = %0d # 5  ",$time );
           end
         join_any
    $display(" time = %0d Outside the main fork ",$time );
    disable fork;
    $display(" Killed the child processes");
   end 

   initial
   #100 $finish;
   endprogram
RESULTS

 BEFORE fork  time = 10
 time = 15 # 5  
 time = 15 Outside the main fork
 Killed the child processes


Index
Introduction
Data Types
Literals
Strings
Userdefined Datatypes
Enumarations
Structures And Uniouns
Typedef
Arrays
Array Methods
Dynamic Arrays
Associative Arrays
Queues
Comparison Of Arrays
Linked List
Casting
Data Declaration
Reg And Logic
Operators 1
Operators 2
Operator Precedency
Events
Control Statements
Program Block
Procedural Blocks
Fork Join
Fork Control
Subroutines
Semaphore
Mailbox
Fine Grain Process Control

Report a Bug or Comment on This section - Your input is what keeps Testbench.in improving with time!





<< PREVIOUS PAGE

TOP

NEXT PAGE >>

copyright © 2007-2017 :: all rights reserved www.testbench.in::Disclaimer