首页 > 其他分享 >自旋锁(spin)与互斥量(mutex)

自旋锁(spin)与互斥量(mutex)

时间:2022-09-03 11:47:47浏览次数:62  
标签:交换 互斥 钥匙 自旋 mutex spin CPU

自旋锁

  程序在多处理器上运行会因为,多个线程同时进行,而导致丧失语句的原子性。例如读和写的操作是分开的,不能保证同时完成。所以软件不够用硬件来凑,通过硬件实现一条指令完成读写:这就是自旋锁。

  可以理解为一个房间门口桌上只放一把钥匙,每次有人想进就用其他东西交换钥匙,拿到钥匙才能进入房间,拿不到钥匙的就重复尝试交换钥匙,直到获得钥匙进入。因为钥匙只有一把,同时只有一个人能交换到钥匙,就实现了原子性。

  自旋锁优点在于只使用一条语句,开销很低,缺点在于,其他进程会反复尝试浪费CPU资源。即上限高,下限低。

互斥锁 

  而互斥锁则是某个人在交换钥匙失败后,就去睡觉,直到钥匙已经放回来时唤醒。

  互斥锁优点在于,减少CPU资源空转,缺点在于,睡眠唤醒都要进入内核。即下限高,上限低。

 

标签:交换,互斥,钥匙,自旋,mutex,spin,CPU
From: https://www.cnblogs.com/xinay/p/16652238.html

相关文章

  • delphi 【数字微调编辑框组件TcxSpinEdit】
      此控件仅支持数字数.默认情况下不支持小数点,但支持负数输入.1.设置控件支持小数点输入.properties---valueType:=vtFloat2.隐藏边框右边的微调按钮.pr......
  • 【c++】线程同步改错题 (互斥体)
     题目:#include<iostream>#include<windows.h>#include<tchar.h>//我想使用线程,让线程按我制定?的方案执行,但是总失败//起床-》吃饭-》工作-》回家-》起床HA......
  • 【c++多线程】互斥量概念、用法、死锁演示以及unique_lock
    第5节互斥量概念、用法、死锁演示及解决详解(1)互斥量(mutex)的基本概念(2)互斥量的用法(2.1)lock(),unlock()(2.2)std::lock_guard类模板(3)死锁(3.1)......
  • sping boot使用LocalDate和LocalDateTime当入参时,报缺少必要参数
    时间字符串作为普通请求参数传入时,转换用的是Converter增加一个时间转换的配置类importcom.sjaco.lccloud.common.pay.kit.DateKit;importcom.sjaco.lccloud.common.......
  • 互斥的Trait
    1.Copy和Drop我们无法为一个类型同时实现Copy和Drop特征。因为实现了Copy的特征会被编译器隐式的复制,因此非常难以预测析构函数执行的时间和频率。因此这些实现了C......
  • 1、spingIOC+IDEA+Maven
    1、先配置spring、springmvc通用xml文件的头部信息spring、springmvc通用xml文件的模板内容如下:1<?xmlversion="1.0"encoding="UTF-8"?>2<beansxmlns="http://......
  • go 读写锁与互斥锁
    go协程读写锁和互斥锁使用场景 读多写少使用读写锁读少写多使用互斥锁 读写锁的性能是互斥锁的100倍 packagemainimport("fmt""mat......
  • golang Sync.Mutex互斥锁和Sync.RWMutex读写锁小结
    Sync.Mutex一、结构体typeMutexstruct{stateint32//互斥锁的状态:被g持有,空闲等semauint32//信号量,用于阻塞/唤醒goroutine(协程)}//使用varmtx......
  • C++ timed_mutex
    #include<iostream>#include<thread>#include<mutex>std::timed_mutexmutex;voidmythread(){std::chrono::millisecondstimeout(100);//100msstd......