The
preempt() function puts the current LWP back on the system run queue and performs an involuntary context switch. The
yield() function is mostly same as
preempt(), except that it performs a voluntary context switch.
These functions drop the kernel lock before switching and re-acquire it before returning.