Signals that the code following this call is a critical region. Any code in
this region must finish running before the calling thread can be suspended
by a call to thread_suspendAll.
This function is, in particular, meant to help maintain garbage collector
invariants when a lock is not used.
A critical region is exited with thread_exitCriticalRegion.
Warning:
Using critical regions is extremely error-prone. For instance, using locks
inside a critical region can easily result in a deadlock when another thread
holding the lock already got suspended.
Signals that the code following this call is a critical region. Any code in this region must finish running before the calling thread can be suspended by a call to thread_suspendAll.
This function is, in particular, meant to help maintain garbage collector invariants when a lock is not used.
A critical region is exited with thread_exitCriticalRegion.
Warning: Using critical regions is extremely error-prone. For instance, using locks inside a critical region can easily result in a deadlock when another thread holding the lock already got suspended.
The term and concept of a 'critical region' comes from Mono's SGen garbage collector.
In: The calling thread must be attached to the runtime.