互斥锁和自旋锁都是用于实现对共享资源互斥访问的锁机制,在访问资源之前必须获得锁,没得到锁则阻塞,而互斥锁和自旋锁的不同在与没获得锁之后如何反映, 互斥锁:当一个线程获得锁失败时,内核将线程睡眠,并自动释放CPU,此时他将等待锁空闲后的某个时间被唤醒,当其他线程用完数据并释放互斥锁时,将唤醒其他等待所得线程,获得锁后,则正常访问,期间有两次上下文开销。如果你锁住的代码执⾏时间⽐较短,那可能上下⽂切换的时间都⽐你锁住的代码执⾏时间还要⻓,此时应该使用自旋锁。 自旋锁:当一个线程获得锁失败后,程序将忙等,直到获取锁,在单核CPU中要使用抢占式调度器,否则可能导致使用自旋锁的线程一直占用CPU,如果被锁住的代码执⾏时间过⻓,⾃旋的线程会⻓时间占⽤ CPU 资源