zoukankan      html  css  js  c++  java
  • Linux 互斥锁的实现原理(pthread_mutex_t)

    本文参考——http://www.bitscn.com/os/linux/201608/725217.html

    http://blog.csdn.net/jianchaolv/article/details/7544316

    引言

    互斥锁大都会使用,但是要了解其原理就要花费一番功夫了。尽管我们说互斥锁是用来保护一个临界区,实际上保护的是临界区中被操纵的数据。

    互斥锁还是分为三类:快速互斥锁/递归互斥锁/检测互斥锁

    futex

    要想了解互斥锁的内部实现,先来了解一下futex(fast Userspace mutexes)的作用。

    内核态和用户态的混合机制。

    还没有futex的时候,内核是如何维护同步与互斥的呢?系统内核维护一个对象,这个对象对所有进程可见,这个对象是用来管理互斥锁并且通知阻塞的进程。如果进程A要进入临界区,先去内核查看这个对象,有没有别的进程在占用这个临界区,出临界区的时候,也去内核查看这个对象,有没有别的进程在等待进入临界区。

    互斥锁

    1、互斥锁的结构?

    在futex的基础上用的内存共享变量来实现的。

    2、不能锁住的时候,是如何进入休眠,又如何等待被唤醒的呢?

    进入锁的时候就会区检查那个共享变量,如果不能获取锁,就会通过futex系统调用进入休眠。如果有人释放锁,就会通过futex来唤醒。

    3、互斥锁的属性?

    指定锁的适用范围。

    4、经典案例——生产者消费者

  • 相关阅读:
    unitTest单元测试框架
    Day06_页面发布与课程管理
    Day05_RabbitMQ研究
    Day04_页面静态化
    Day04_freemarker
    Day03_CMS页面管理开发
    Java概述练习题
    01_语言概述
    00_编程入门
    德道经
  • 原文地址:https://www.cnblogs.com/sylz/p/6030201.html
Copyright © 2011-2022 走看看