What is the meaning of int b declared and used as @(b) in system verilog?

In the following SV Code what is the meaning of @(b)?
it is clearly not event because b is a variable type of integer.
Please enlighten me…

class my_class;
 semaphore sem = new(1);  // declare a semaphore
 int a,b;
  task t_a();
    while(!a)  begin
      #10 sem.get(1);
      t_d($urandom_range(20,11), $urandom_range(99,9));
      b++;
      sem.put(1);
    end
  endtask : t_a
  task t_b();
    while(!a)  begin
      #10 sem.get(1);
      t_d($urandom_range(10,1), $urandom_range(88,8));
      b++;
      sem.put(1);
    end
  endtask : t_b
   task t_c();
     while(!a) begin
       @(b);
       if (b > 5)
           a = 1;
       end
   endtask : t_c
 task t_d(int c, int d);
    $display($time,"\tWrite into the Bus : Address : %0d ---> Data = %0d",c,d); #100;
  endtask : t_d
  task  run();  
    fork
     t_a();
     t_b();
     t_c();
    join
    #500 $display ($time,"\t Transactions Over -- out\n");
  endtask : run
endclass

module tb_top();
  initial begin
    my_class h_my_class;
    h_my_class = new;
    h_my_class.run();    
  end
endmodule

In reply to Thobiyas:

@(expression) means "wait for the value of the expression to change. So @(b) means wait for the value of b to change.

In reply to dave_59:

Thanks a lot…
Now I understand.

It seems like event property in SV.
There are as many as alrtnatives in SV for event property.
Need to understand all those… I’ll ask further questions in SV I’m gonna have.