Difficulty: Hard · Puzzle 6 of 6 · Topic: Fork Join Puzzles
Which prints survive this nested-fork pattern, and why?
module p6;
initial begin
fork
begin
fork
begin #2 $display("%0t A", $time); end
begin #4 $display("%0t B", $time); end
join_any
disable fork;
$display("%0t C", $time);
end
begin
#3 $display("%0t D", $time);
end
join
$display("%0t E", $time);
end
endmodule`disable fork` applies to child processes of the process that calls it (its innermost active fork context).
1) In inner fork, A prints at t=2; `join_any` unblocks immediately.
2) `disable fork` then kills inner sibling B before t=4.
3) C prints at t=2 after cleanup.
4) Outer sibling D is in a different fork context, so it still prints at t=3.
5) Outer join completes at t=3 and E prints at t=3.Answer: A@2, C@2, D@3, E@3; B does not print
A common bug is assuming `disable fork` is global and kills unrelated sibling branches.
How would you explicitly terminate both outer branches from inside the first branch?