FreeBSD Manual Pages
CRITICAL_ENTER(9) FreeBSD Kernel Developer's Manual CRITICAL_ENTER(9) NAME critical_enter, critical_exit -- enter and exit a critical region SYNOPSIS #include <sys/param.h> #include <sys/systm.h> void critical_enter(void); void critical_exit(void); DESCRIPTION These functions are used to prevent preemption in a critical region of code. All that is guaranteed is that the thread currently executing on a CPU will not be preempted. Specifically, a thread in a critical region will not migrate to another CPU while it is in a critical region. The current CPU may still trigger faults and exceptions during a critical section; however, these faults are usually fatal. The critical_enter() and critical_exit() functions manage a per-thread counter to handle nested critical sections. If a thread is made runnable that would normally preempt the current thread while the current thread is in a critical section, then the preemption will be deferred until the current thread exits the outermost critical section. Note that these functions are not required to provide any inter-CPU syn- chronization, data protection, or memory ordering guarantees and thus should not be used to protect shared data structures. These functions should be used with care as an infinite loop within a critical region will deadlock the CPU. Also, they should not be inter- locked with operations on mutexes, sx locks, semaphores, or other syn- chronization primitives. One exception to this is that spin mutexes in- clude a critical section, so in certain cases critical sections may be interlocked with spin mutexes. HISTORY These functions were introduced in FreeBSD 5.0. FreeBSD 13.0 October 5, 2005 FreeBSD 13.0
NAME | SYNOPSIS | DESCRIPTION | HISTORY
Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=critical_enter&sektion=9&manpath=FreeBSD+13.1-RELEASE+and+Ports>