DEFINE_MUTEX是来自include/linux/mutex.h中的一个宏,用它可以定义一把互斥锁,在Linux内核中,其实是在2005年底才建立比较系统、完善的互斥锁机制,在那年冬天,来自RedHat公司的Ingo Molnar大胆地提出了他所谓的Generic Mutex Subsystem,即通用的互斥锁机制。此前内核中很多地方使用的都是信号量,而当时间的箭头指向了2005年末时,"区里"(开源社区,下称区里)很多人抱怨说信号量不灵,很多时候不好用,当然"区里"为这事展开了一场轰轰烈烈的讨论。

老黑客Ingo Molnar受不了了,在一周之后,愤然提出要对内核进行一场大的革命。当时Ingo提出了诸多理由要求使用新的互斥锁机制,而不是过去普遍出现在内核中的信号量机制,比如新的机制占用更小的内存,代码更紧凑、更快、更便于调试。在诸多优势的诱惑下,"区里"的成员将信将疑地便认可了这种做法。

忽如一夜春风来,在紧接着的几个月里,人们纷纷提交patch,把原来用信号量的地方都改成了互斥锁。而这种改变深入到Linux中USB子系统是始于2006年春天Greg将USB的代码中绝大多数的信号量代码换成了互斥锁代码。所以到今天,在2.6.22内核的代码中,整个USB子系统里几乎没有down/up这一对函数的使用,取而代之的是mutex_lock()和mutex_unlock()函数对。而要初始化,只需像我们这里一样用DEFINE_MUTEX(name)即可。关于这个新的互斥锁,其定义在include/linux/mutex.h中,而实现在kernel/mutex.c中。

【转载】linux中互斥尽量用mutex,不用semaphore的更多相关文章

  1. [转载]Linux中的网络接口及LO回环接口

    转自:https://blog.csdn.net/weixin_39863747/article/details/80564358 Linux中的网络接口及LO回环接口 2018年06月04日 10: ...

  2. [转载] linux中文件描述符fd和文件指针flip的理解

    转载自http://www.cnblogs.com/Jezze/archive/2011/12/23/2299861.html 简单归纳:fd只是一个整数,在open时产生.起到一个索引的作用,进程通 ...

  3. [转载] Linux中的搜索文件命令

    搜索文件用处很大,我们往往需要知道一个文件存放在什么地方,我们又知道Linux是命令强大的一个系统,所以也有好多非常优秀的搜索命令.通常find不常用,因为速度慢,耗费硬盘空间.通常我们先使用wher ...

  4. [转载]linux中sed的用法

    转自:http://www.cnblogs.com/emanlee/archive/2013/09/07/3307642.html sed命令行格式为:         sed [-nefri]  ‘ ...

  5. Linux组件封装(一)中互斥锁MutexLock的封装

    本文对Linux中的pthread_mutex_t做一个简易的封装. 互斥锁主要用于互斥,互斥是一种竞争关系,主要是某一个系统资源或一段代码,一次做多被一个线程访问. 条件变量主要用于同步,用于协调线 ...

  6. 在Linux中使用线程

    我并不假定你会使用Linux的线程,所以在这里就简单的介绍一下.如果你之前有过多线程方面的编程经验,完全可以忽略本文的内容,因为它非常的初级. 首先说明一下,在Linux编写多线程程序需要包含头文件p ...

  7. 【转载】Linux中强大且常用命令:find、grep

    转载自:http://www.linuxeden.com/html/softuse/20130804/142065.html 在linux下面工作,有些命令能够大大提高效率.本文就向大家介绍find. ...

  8. 【转载】Linux中常用操作命令

    说明:开始学习linux系统,为了方便查看,特转载一篇Linux中常用操作命令,转载地址:http://www.cnblogs.com/laov/p/3541414.html 正文: Linux简介及 ...

  9. Linux中环境变量文件及配置(转载)

    一.环境变量文件介绍 转自:http://blog.csdn.net/cscmaker/article/details/7261921 Linux中环境变量包括系统级和用户级,系统级的环境变量是每个登 ...

随机推荐

  1. Linux查看程序端口占用情况(转载)

    From:http://www.cnblogs.com/benio/archive/2010/09/15/1826728.html 今天发现服务器上Tomcat 8080端口起不来,老提示端口已经被占 ...

  2. php 获取时间今天明天昨天时间戳

    <?php echo "今天:".date("Y-m-d")."<br>";      echo "昨天:&qu ...

  3. Java多线程之后台线程不执行finally

    后台线程不执行finally package wzh.daemon; import java.util.concurrent.TimeUnit; class ADaemon implements Ru ...

  4. iOS 版本更新检查

    #pragma mark ---------------------------------- #pragma mark -- 检测版本更新 -(void)onCheckVersion { NSDic ...

  5. SQLite打开提示database disk image is malformed

    SQLite打开提示database disk image is malformed 网上说产生这种错误的原因有很多种,磁盘空间不足,还有就是写入数据过程中突然掉电等. 这种情况,如果数据还可以导出, ...

  6. cocos2dx跨平台使用自定义字体

    首先需要一个ttf文件的字体. 在ios中的方法: 把ttf文件放入资源文件下,然后在你的工程的Info.plist文件中新建一行(Add Row),添加key为:Fonts provided by ...

  7. Hive分布式的数据仓库

    1.hive介绍 hive是一个数据仓库的解决方案,它的数据存储依赖于HDFS,数据结算依赖于MR,也就是说,hive就是一个在数据仓库的服务,它只需要安装到一台普通的PC上即可,仅仅对外提供SQL服 ...

  8. 如何在IIS7上配置 FTP7并使用IIS管理凭据方式进行验证?

    如何在IIS7上配置 FTP7并使用IIS管理凭据方式进行验证? 在 Windows Server 2008 R2 发布后,gOxiA 就开始着手于相关的测试和评估.IIS 是重点测试和评估之一!而今 ...

  9. C语言-删除重复字符

    //实现对一个字符串的删除重复的字符,并输出删除后的字符串,(如从”testroadeasy”中输出”tesroady”) Action(){    char *str="testroade ...

  10. JMeter简介

    #Jmeter简介JMeter是一个100%纯Java桌面应用,它是Apache组织的开放源代码项目,它是功能和性能测试的工具.JMeter可以用于测试静态或者动态资源的性能.JMeter有以下特性: ...