Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages


home | help
CRITICAL_ENTER(9)      FreeBSD Kernel Developer's Manual     CRITICAL_ENTER(9)

     critical_enter, critical_exit -- enter and	exit a critical	region

     #include <sys/param.h>
     #include <sys/systm.h>



     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.

     These functions were introduced in	FreeBSD	5.0.

FreeBSD	13.0			October	5, 2005			  FreeBSD 13.0


Want to link to this manual page? Use this URL:

home | help