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

FreeBSD Manual Pages

  
 
  

home | help
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>

home | help