互斥体概述
信号量是在并行处理环境中对多个处理器访问某个公共资源进行保护的机制,mutex用于互斥操作。
信号量的count初始化为1,down()/up()也可以实现类似mutex的作用。
mutex的语义相对于信号量要简单轻便一些,在锁争用激烈的测试场景下,mutex比信号量执行速度更快,可扩展性更好,另外mutex数据结构的定义比信号量小。
mutex的优点
mutex和信号量相比要高效的多:
mutex最先实现自旋等待机制
mutex在睡眠之前尝试获取锁
mutex实现MCS所来避免多个CPU争用锁而导致CPU高速缓存颠簸现象。
mutex的使用注意事项:
同一时刻只有一个线程可以持有mutex。
只有锁持有者可以解锁。不能再一个进程中持有mutex,在另外一个进程中释放他。
不允许递归地加锁和解锁。
当进程持有mutex时,进程不可以退出。
mutex必须使用官方API来初始化。
mutex可以睡眠,所以不允许在中断处理程序或者中断下半部中使用,例如tasklet、定时器等。