If you want something coming from kernel space, then you might want to look at semaphores (
sem_overview(7)). You can built higher level constructs from a semaphore, like "event", "condition", "mutex" ("critical sections"). There are the older and newer interfaces in C. Some higher level languages like Python and Perl also expose the interface.
The "Mutex" that you are likely talking about is the pthread's mutex, which will be faster than anything in user space, especially one using a spinlock (which were designed for extremely low level OS level constructs). Some pthread's implementations may use an OS level
semaphore or may use other constructs.