In reply to saritr:
you should use process in your case or labeled , code is not tested .
virtual task run_phase (uvm_phase phase);
process thread ;
forever begin
fork
monitor_cycle_count();
forever begin
mon_trx = axi_transaction::type_id::create("mon_trx");
fork
thread = process::self();
monitor_write();
monitor_read();
join_any
thread.kill();
end
join
end
endtask: run_phase