互斥锁(Mutex)是在原子操作API的基础上实现的信号量行为。互斥锁不能进行递归锁定或解锁,能用于交互上下文但是不能用于中断上下文,同一时间只能有一个任务持有互斥锁,而且只有这个任务可以对互斥锁进行解锁。喜下面良许教程网为大家分享一下Linux系统互斥锁的实现原理。
引言
互斥锁大都会使用,但是要了解其原理就要花费一番功夫了。尽管我们说互斥锁是用来保护一个临界区,实际上保护的是临界区中被操纵的数据。
互斥锁还是分为三类:快速互斥锁/递归互斥锁/检测互斥锁
futex
要想了解互斥锁的内部实现,先来了解一下futex(fast Userspace mutexes)的作用。
内核态和用户态的混合机制。
还没有futex的时候,内核是如何维护同步与互斥的呢?系统内核维护一个对象,这个对象对所有进程可见,这个对象是用来管理互斥锁并且通知阻塞的进程。如果进程A要进入临界区,先去内核查看这个对象,有没有别的进程在占用这个临界区,出临界区的时候,也去内核查看这个对象,有没有别的进程在等待进入临界区。
互斥锁
1、互斥锁的结构?
在futex的基础上用的内存共享变量来实现的。
2、不能锁住的时候,是如何进入休眠,又如何等待被唤醒的呢?
进入锁的时候就会区检查那个共享变量,如果不能获取锁,就会通过futex系统调用进入休眠。如果有人释放锁,就会通过futex来唤醒。
3、互斥锁的属性?
指定锁的适用范围。
以上就是良许教程网为各位朋友分享的Linux系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你!
本文来源:www.lxlinux.net/1742.html,若引用不当,请联系修改。



