mutex
2018-05-14 本文已影响10人
黑魔术师
1.锁的意义是什么
http://blog.jobbole.com/106582/
2.信号量,互斥量
信号量 wait signal
https://www.zhihu.com/question/39850927
3.互斥锁,自旋锁,读写锁, Peterson锁
http://blog.jobbole.com/106582/
http://blog.jobbole.com/106981/
4.进程间通信(Inter Process Communication, IPC)中的静态条件
5.操作系统层级的锁
cas原子操作
6.竞态条件,竞态资源,轮询忙等,锁变量,原子性,TSL,阻塞,睡眠,唤醒,管程
7.golang实现
mutex底层有一个state和一个sema组成。
1.通过cas先比较和设置state,如果上锁成功,则lock成功,否则进入循环上锁的阶段。
2.循环开始先通过位运算判断状态中 lock为1且starving不为1时,且允许自旋时,进入自旋状态。
3.自旋中给state打上woke标记,如果成功,说明在这个时间片内把state打上了一个意向锁。
4.后续经过判断后上一把实际的锁,如果没有上锁成功加入sema的队列中。在unlock时如果sema队列中有任务则进行唤醒。
5.在信号量的入队列操作时,还实现了一把简化的锁,还进行了等待等操作。
6.通过golink把具体的实现映射到runtime包中,可以便捷的进行协程的控制和调度。