Are functions essentially atomic?

I read that a function must execute in one simulation time unit. Does that mean that functions are essentially atomic and I would not have to handle any race conditions?

For example, if I had


fork
  begin
    my_function_call(); //Process 1
  end

  begin
    my_function_call(); //Process 2
  end
join

Can I assume that both functions will never run concurrently? Since they essentially “return immediately”?

In reply to jimmyhuang0904:

Your code might have a race because there is no deterministic ordering between the starting execution of the two processes. That is independent of atomic execution.

Verilog/SystemVerilog never guarantees atomic execution between any statements executing in 0 time - only the ordering of statements within a single process.