wait fork ve disable fork
Gün 4: Süreçler Arası İletişim (IPC) | Süreç bekleme, iptal etme ve timeout kalıbı
Kaynak Kod
// =============================================================================
// GUN 4 - Konu 2: wait fork ve disable fork
// =============================================================================
module wait_disable_fork;
task automatic slow_task(string name, int delay);
$display(" [%0t] %s basladi", $time, name);
#delay;
$display(" [%0t] %s bitti", $time, name);
endtask
// --- wait fork: Tum cocuk sureclerin bitmesini bekle ---
initial begin
$display("=== wait fork ve disable fork ===\n");
$display("--- wait fork ---");
$display(" [%0t] Ana surec basladi", $time);
fork
slow_task("Task_A", 20);
slow_task("Task_B", 40);
join_none
$display(" [%0t] join_none sonrasi, diger is yapiliyor...", $time);
#10;
$display(" [%0t] Ek is bitti, simdi fork'lari bekliyoruz", $time);
wait fork; // Task_A ve Task_B bitene kadar bekle
$display(" [%0t] wait fork: Tum gorevler tamamlandi!\n", $time);
end
// --- disable fork: Tum cocuk surecleri sonlandir ---
initial begin
#100;
$display("--- disable fork ---");
$display(" [%0t] Baslangic", $time);
fork
begin
slow_task("Uzun_Task", 100); // Cok uzun
end
begin
slow_task("Kisa_Task", 10);
end
join_any
$display(" [%0t] join_any: Biri bitti, digerini iptal ediyoruz", $time);
disable fork; // Kalan surecleri sonlandir
$display(" [%0t] disable fork: Tum bekleyen gorevler iptal edildi\n", $time);
end
// --- Zaman asimi (Timeout) kalibi ---
initial begin
#300;
$display("--- Timeout Kalibi ---");
$display(" [%0t] Baslangic", $time);
fork : timeout_block
begin
slow_task("Hedef_Task", 50);
$display(" [%0t] Hedef gorev basarili!", $time);
end
begin
#30; // 30ns timeout
$display(" [%0t] ZAMAN ASIMI! 30ns icinde bitmedi", $time);
end
join_any
disable timeout_block;
$display(" [%0t] Timeout blogu tamamlandi\n", $time);
#10;
$display("=== wait/disable fork Sonu ===");
$finish;
end
endmodule