用户态 spinlock 这个东西,其实没多大用。(其实在内核态用的地方也很少,基本上依赖 scheduler 的代码都不能用。)

如果你看过 Linux kernel 代码,你会知道在 disable SMP 的时候,spinlock 是一个空函数。在 Linux kernel 里,spinlock 仅仅是一个在多核之间做同步的机制。这个机制用在普通的线程模型上意义不大。

为什么说意义不大呢?你看用 spinlock 的初衷是什么?是为了让 waiting thread 不被挂起,不用产生进程 suspend-reschedule 的开销。但是你要让 waiting thread 等待的尽量短,还要有一个要求,就是 lock-owning thread 得赶紧把事情干完。那你怎么保证 lock-owning thread 赶紧完事呢?你得保证 waiting thread 和 lock-owner 运行在不同 CPU 上,而且 lock-owner 最好能 disable interrupt 防止自己被 preemptively suspend。否则的话,不光还要有 thread switch,而且 lock-owner 还可能去空等待 waiting thread,因为后者在 busy-waiting 而并非挂起。所以你看,这个条件只有在 kernel 里操作多核的特殊代码才能满足。在用户空间的线程是不知道自己是不是运行在同一个核上的。

所以说 spinlock 在用户空间有可能反而比 mutex 要慢。这个东西实在是鸡肋。只要你已经把自己的代码托付给了 scheduler,mutex 是目前最好的同步模型。(当然 atomic 和 memory barrier 也是,但是它们都不能构建任意长的 critical region。)而且 disk I/O 本来就会 voluntarily relinquish CPU。这种 lock-owner 为什么还要用 spin lock 我就看不懂了。

读写自旋锁 linux,boost是否像Linux一样提供读写自旋锁机制?相关推荐

  1. linux系统存储文件系统,Linux文件系统的深入分析

    [IT168 技术]本人很喜欢Linux,在工作中也很喜欢总结关于Linux文件系统的经验,下面就这个问题来详细说说吧.Linux支持多种文件系统,包括ext2.iso9660.jffs.ext3.v ...

  2. 从自旋锁、睡眠锁、读写锁到 Linux RCU 机制讲解

    总结一下 O/S 课程里面和锁相关的内容. 本文是 6.S081 课程的相关内容总结回顾结合 Real World 的 Linux 讲解各种锁和 RCU lock free 机制原理, 前置知识是基本 ...

  3. Linux内核之内核同步(三)——自旋锁

    自旋锁 上回,我们说到为了避免并发,防止竞争,内核提供了一些方法来实现对内核共享数据的保护.如果临界区只是一个变量,那么使用原子操作即可,但实际上临界区大多是一些数据操作的集合,这时候使用原子操作不太 ...

  4. linux 驱动器发送信号,Linux设备驱动并发控制详解(自旋锁,信号量)

    转发:Linux设备驱动并发控制详解(自旋锁,信号量) 作者:jinhaijun 提交日期:2008-3-12 14:08:00 | 分类: | 访问量:144 link:http://www.emb ...

  5. Linux ARM平台开发系列讲解(自旋锁) 3.3.1 Linux内核自旋锁描述

    1. 概述 原子操作只能对整形变量或者位进行保护,但是,在实际的使用环境中怎么可能只有整形变量或位这么简单的临界区.举个最简单的例子,设备结构体变量就不是整型变量,我们对于结构体中成员变量的操作也要保 ...

  6. Linux文件系统、虚拟内存、进程与线程、锁

    文章目录 文件系统 su Linux 中默认没有 super 命令 /proc /etc /var /root /home /bin /dev /lib /sbin tmp 句柄 maxfd PWD ...

  7. linux 内核连接跟踪,Linux内核连接跟踪锁的优化分析(1)

    Linux内核连接跟踪锁的优化分析(1) 作者:gfree.wind@gmail.com 博客:linuxfocus.blog.chinaunix.net 微博:weibo.com/glinuxer ...

  8. linux系统怎么查看权限设置密码,linux系统怎么查看及修改文件读写权限设置

    在linux中查看与修改文件权限我们都必须使用命令来操作,不能像windows一样点几下就好了,那么linux系统怎么查看及修改文件读写权限设置?接下来大家跟着学习啦小编一起来了解一下linux系统查 ...

  9. 如何修改Linux的锁屏时间,调整Kali Linux的锁屏时间

    调整Kali Linux的锁屏时间 锁屏是保护隐私的一种重要机制.当用户不操作电脑一段时间后,系统会进入锁屏状态.用户需要输入口令,才能重新进入系统.避免因为操作人员离开电脑后,被其他人员利用现有帐号 ...

最新文章

  1. Redis cluster日常管理【一】
  2. 处理报错:java/lang/NoClassDefFoundError: java/lang/Object
  3. 二叉树的前序中序后序递归查找,深度,广度搜索C++实现(VS2017)
  4. 利用jdbc做一个购买的事务
  5. 基于JAVA+SpringBoot+Mybatis+MYSQL的进销存管理系统
  6. Spring MVC url提交参数和获取参数
  7. sklearn学习 6.聚类算法K-Means
  8. java 验证服务器宕机_java服务宕机原因查询
  9. 实战:node-react项目部署到服务器
  10. SQL Server数据库 - 安装教程
  11. 2018我读过的那些书
  12. CNN实现简单语音识别(单词识别)
  13. 网站灰色代码|哀悼日专用
  14. 微服务启动报错:Shutting down DiscoveryClient
  15. docker部署springboot工程
  16. java电商商品基本信息表,Java生鲜电商平台-商品表的设计
  17. **Maven web项目报错**-web.xml is missing and <failOnMissingWebXml> is set to true 原因:生成的maven web项目webap
  18. python制作词典软件_AlphaDict: 它是一个轻量级的开放词典格式的开源词典软件,你可以制作自己的词典, 也是一个跨平台的软件支持 linux, unix and windows....
  19. php 计算一年后的时间,php 计算一年多少周,同时计算出这一周的开始日期和结束日期...
  20. SDN软件定义网络之OpenFlow协议

热门文章

  1. 操作系统实验一:并发程序设计
  2. python3 输出系统信息
  3. SQL 之连接查询
  4. HDU5763 another meaning -(KMP+DP)
  5. PADS 9.5封装向导 多一个管脚
  6. 图片尺寸判断等-我们到底能走多远系列(21)
  7. 如何运行项目或工程中的单独java文件---找不到或无法加载主类”错误的原因
  8. 网站访客 简易日志记录
  9. K linux 部署手机 centos6.5
  10. Haproxy-1.5.x SSL配置