SystemVerilog creates a
thread of execution for each initial or always block, for each parallel statement in a fork...join block and for each dynamic process. Each continuous
assignment can also be considered its own thread. Execution of each thread can be
interrupted between statements at a semicolon, but a single statement (not a
block) containing no user task or function call cannot
be uninterrupted. This allows atomic test-and-set
using assignment operators in an if statement.
Execution of
each thread can be interrupted between statements at a semicolon, but a single
statement (not a block) containing neither a user task call nor a function call
shall not be interrupted. This allows atomic test-and-set using assignment
operators in an if statement.