首页 > 其他分享 >计算机锁原理

计算机锁原理

时间:2023-01-31 10:46:22浏览次数:43  
标签:加锁 抢占 计算机 线程 悲观 自旋 原理 数据

  • 随着多进程多线程的出现,对共享资源(设备,数据等)的竞争往往会导致资源的使用表现为随机无序
  • 例如:一个线程想在控制台输出"I am fine",刚写到"I am",就被另一线程抢占控制台输出"naughty",导致结果是"I am naughty";对于资源的被抢占使用,我们能怎么办呢?当然不是凉拌,可使用锁进行同步管理,使得资源在加锁期间,其他线程不可抢占使用

1 锁的分类

  • 悲观锁
    • 悲观锁,每次去请求数据的时候,都认为数据会被抢占更新(悲观的想法);所以每次操作数据时都要先加上锁,其他线程修改数据时就要等待获取锁。适用于写多读少的场景,synchronized就是一种悲观锁
  • 乐观锁
    • 在请求数据时,觉得无人抢占修改。等真正更新数据时,才判断此期间别人有没有修改过(预先读出一个版本号或者更新时间戳,更新时判断是否变化,没变则期间无人修改);和悲观锁不同的是,期间数据允许其他线程修改
  • 自旋锁
    • 一句话,魔力转转圈。当尝试给资源加锁却被其他线程先锁定时,不是阻塞等待而是循环再次加锁
    • 在锁常被短暂持有的场景下,线程阻塞挂起导致CPU上下文频繁切换,这可用自旋锁解决;但自旋期间它占用CPU空转,因此不适用长时间持有锁的场景
    • 自旋锁是采用让当前线程不停地的在循环体内执行实现的,当循环的条件被其他线程改变时 才能进入临界区,线程尝试获取锁的过程不会阻塞;

       

标签:加锁,抢占,计算机,线程,悲观,自旋,原理,数据
From: https://www.cnblogs.com/magicg/p/17078125.html

相关文章

  • OpenMP 线程同步 Construct 实现原理以及源码分析(下)
    OpenMP线程同步Construct实现原理以及源码分析(下)前言在上面文章当中我们主要分析了flush,critical,master这三个construct的实现原理。在本篇文章当中我们将主......
  • NAPT网络结构下TCP/UDP/ICMP访问外网原理思考
    背景作为程序员,应该都听说过NAT(NetworkAddressTransfer,网络地址转换)这一技术名词,并或多或少大概知道其原理与作用--NAT是用于解决IPv4地址不够用,保证我们能够在IPv6普......
  • 温度传感器实现原理与操作方法(经典版)
    第一:数字温度传感器(DS18B20)DS18B20是一款常用的高精度的单总线数字温度测量芯片。具有体积小,硬件开销低,抗干扰能力强,精度高的特点。温度传感器参数和特性:1、测温范围为-55℃......
  • 图解redis的5种数据类型底层原理
    redis的5种数据类型以及其底层实现redis是KV(key-valuepair)存储,不管是K还是V,底层都是对象(object组成)的,其中K是一个字符串对象(stringobject),V分别有我们常听说的5种......
  • AJAX jsonp实现原理
    视频script标签处理函数调用,handle(),在html中实现handle(),在js中返回'handle()'字符串从而实现跨域。HTML<!DOCTYPEhtml><htmllang="en"><head><metacharset......
  • 浅析瀑布流布局原理
    前言上一文讲到了图片,这里我们就讲一个常用的图片场景:瀑布流,他的实现和优化什么瀑布流瀑布流,又称瀑布流式布局。是比较流行的一种网站页面布局,视觉表现为参差不......
  • DAPP 和 APP 有哪些区别?多链跨链 NFT 铸造dapp 系统开发技术原理分析
    DAPP智能合约开发流程是怎样?基本流程Asch有三种网络类型,分别是localnet,testnet,mainnet,后两种是发布到线上的,可以通过公网访问。第一种localnet是运行在本地的,只有一个......
  • 常见计算机行业的公司
    AMD:美国超威半导体公司:美国AMD半导体公司专门为计算机、通信和消费电子行业设计和制造各种创新的微处理器(CPU、GPU、主板芯片组、电视卡芯片等),以及提供闪存和低功率处理器......
  • 计算机网络查看路由表命令,如何查看、添加、修改、删除路由器内部的路由表项
    操作步骤:1、首先,我们看看如何在dos界面下获取帮助信息;可以通过命令:【help】回车;或者【关键字/?】这两种方式。2、如何查看电脑内部路由;可以通过命令:【routeprint......
  • 个人自学计算机学习大纲
    一、计算机四大核心基础计算机组成计算机网络操作系统数据结构二、研发需要c/java、ruby(个人学习)软件工程编译原理算法数据库三、落实技术栈Rubyon......