SpinLock:自旋(自我检查锁是否可用,无需上下文切换)
Mutex:互斥(需要线程上下文切换)
Semaphore:信号量(先抢先得,也需要线程上下文切换)
Condition variable:条件变量
sem实时性差--sem如果不允许进入临界区,那么会放弃CPU切换到其它进程,待进入临界区的进程释放锁后,再切换到该进程。那么一来一回切换进程的时间开销,对于实时性来说是种伤害
不能放弃cpu---busy_loop。
多核:perfect!
单核: no 抢占, 主动放弃也不行。
spin_lock 的实现者:
一是禁止了进入临界区进程被剥夺的权利,二是禁止了运行该进程所在CPU的中断。
user:
而spin_lock的使用者,则需要保证临界区代码不调用可能放弃CPU的函数
由于spin_lock的使用会浪费CPU资源(因为busy_loop),所以为了尽可能地消除负面影响,要求使用者spin_lock所保护的临界区代码尽可能精炼简单