爆款云主机2核4G限时秒杀,88元/年起!
查看详情

活动

天翼云最新优惠活动,涵盖免费试用,产品折扣等,助您降本增效!
热门活动
  • 618智算钜惠季 爆款云主机2核4G限时秒杀,88元/年起!
  • 免费体验DeepSeek,上天翼云息壤 NEW 新老用户均可免费体验2500万Tokens,限时两周
  • 云上钜惠 HOT 爆款云主机全场特惠,更有万元锦鲤券等你来领!
  • 算力套餐 HOT 让算力触手可及
  • 天翼云脑AOne NEW 连接、保护、办公,All-in-One!
  • 中小企业应用上云专场 产品组合下单即享折上9折起,助力企业快速上云
  • 息壤高校钜惠活动 NEW 天翼云息壤杯高校AI大赛,数款产品享受线上订购超值特惠
  • 天翼云电脑专场 HOT 移动办公新选择,爆款4核8G畅享1年3.5折起,快来抢购!
  • 天翼云奖励推广计划 加入成为云推官,推荐新用户注册下单得现金奖励
免费活动
  • 免费试用中心 HOT 多款云产品免费试用,快来开启云上之旅
  • 天翼云用户体验官 NEW 您的洞察,重塑科技边界

智算服务

打造统一的产品能力,实现算网调度、训练推理、技术架构、资源管理一体化智算服务
智算云(DeepSeek专区)
科研助手
  • 算力商城
  • 应用商城
  • 开发机
  • 并行计算
算力互联调度平台
  • 应用市场
  • 算力市场
  • 算力调度推荐
一站式智算服务平台
  • 模型广场
  • 体验中心
  • 服务接入
智算一体机
  • 智算一体机
大模型
  • DeepSeek-R1-昇腾版(671B)
  • DeepSeek-R1-英伟达版(671B)
  • DeepSeek-V3-昇腾版(671B)
  • DeepSeek-R1-Distill-Llama-70B
  • DeepSeek-R1-Distill-Qwen-32B
  • Qwen2-72B-Instruct
  • StableDiffusion-V2.1
  • TeleChat-12B

应用商城

天翼云精选行业优秀合作伙伴及千余款商品,提供一站式云上应用服务
进入甄选商城进入云市场创新解决方案
办公协同
  • WPS云文档
  • 安全邮箱
  • EMM手机管家
  • 智能商业平台
财务管理
  • 工资条
  • 税务风控云
企业应用
  • 翼信息化运维服务
  • 翼视频云归档解决方案
工业能源
  • 智慧工厂_生产流程管理解决方案
  • 智慧工地
建站工具
  • SSL证书
  • 新域名服务
网络工具
  • 翼云加速
灾备迁移
  • 云管家2.0
  • 翼备份
资源管理
  • 全栈混合云敏捷版(软件)
  • 全栈混合云敏捷版(一体机)
行业应用
  • 翼电子教室
  • 翼智慧显示一体化解决方案

合作伙伴

天翼云携手合作伙伴,共创云上生态,合作共赢
天翼云生态合作中心
  • 天翼云生态合作中心
天翼云渠道合作伙伴
  • 天翼云代理渠道合作伙伴
天翼云服务合作伙伴
  • 天翼云集成商交付能力认证
天翼云应用合作伙伴
  • 天翼云云市场合作伙伴
  • 天翼云甄选商城合作伙伴
天翼云技术合作伙伴
  • 天翼云OpenAPI中心
  • 天翼云EasyCoding平台
天翼云培训认证
  • 天翼云学堂
  • 天翼云市场商学院
天翼云合作计划
  • 云汇计划
天翼云东升计划
  • 适配中心
  • 东升计划
  • 适配互认证

开发者

开发者相关功能入口汇聚
技术社区
  • 专栏文章
  • 互动问答
  • 技术视频
资源与工具
  • OpenAPI中心
开放能力
  • EasyCoding敏捷开发平台
培训与认证
  • 天翼云学堂
  • 天翼云认证
魔乐社区
  • 魔乐社区

支持与服务

为您提供全方位支持与服务,全流程技术保障,助您轻松上云,安全无忧
文档与工具
  • 文档中心
  • 新手上云
  • 自助服务
  • OpenAPI中心
定价
  • 价格计算器
  • 定价策略
基础服务
  • 售前咨询
  • 在线支持
  • 在线支持
  • 工单服务
  • 建议与反馈
  • 用户体验官
  • 服务保障
  • 客户公告
  • 会员中心
增值服务
  • 红心服务
  • 首保服务
  • 客户支持计划
  • 专家技术服务
  • 备案管家

了解天翼云

天翼云秉承央企使命,致力于成为数字经济主力军,投身科技强国伟大事业,为用户提供安全、普惠云服务
品牌介绍
  • 关于天翼云
  • 智算云
  • 天翼云4.0
  • 新闻资讯
  • 天翼云APP
基础设施
  • 全球基础设施
  • 信任中心
最佳实践
  • 精选案例
  • 超级探访
  • 云杂志
  • 分析师和白皮书
  • 天翼云·创新直播间
市场活动
  • 2025智能云生态大会
  • 2024智算云生态大会
  • 2023云生态大会
  • 2022云生态大会
  • 天翼云中国行
天翼云
  • 活动
  • 智算服务
  • 产品
  • 解决方案
  • 应用商城
  • 合作伙伴
  • 开发者
  • 支持与服务
  • 了解天翼云
      • 文档
      • 控制中心
      • 备案
      • 管理中心

      Synchronized与锁升级

      首页 知识中心 其他 文章详情页

      Synchronized与锁升级

      2023-05-11 05:53:19 阅读次数:476

      锁

      1、Synchronized 锁优化的背景

      Synchronized与锁升级

      用锁能够实现数据的安全性,但是会带来性能下降。
      无锁能够基于线程并行提升程序性能,但是会带来安全性下降。

      Synchronized与锁升级

      synchronized锁:由对象头中的Mark Word根据锁标志位的不同而被复用及锁升级策略

      2、Synchronized的性能变化

      java5以前,只有Synchronized,这个是操作系统级别的重量级操作,重量级锁,假如锁的竞争比较激烈的话,性能下降

      1、Java5之前,用户态和内核态之间的切换

      Synchronized与锁升级

      java的线程是映射到操作系统原生线程之上的,如果要阻塞或唤醒一个线程就需要操作系统介入,需要在户态与核心态之间切换,这种切换会消耗大量的系统资源,因为用户态与内核态都有各自专用的内存空间,专用的寄存器等,用户态切换至内核态需要传递给许多变量、参数给内核,内核也需要保护好用户态在切换时的一些寄存器值、变量等,以便内核态调用结束后切换回用户态继续工作。

      Synchronized与锁升级

      在Java早期版本中,synchronized属于重量级锁,效率低下,因为监视器锁(monitor)是依赖于底层的操作系统的Mutex Lock来实现的,挂起线程和恢复线程都需要转入内核态去完成,阻塞或唤醒一个Java线程需要操作系统切换CPU状态来完成,这种状态切换需要耗费处理器时间,如果同步代码块中内容过于简单,这种切换的时间可能比用户代码执行的时间还长”,时间成本相对较高,这也是为什么早期的synchronized效率低的原因 Java 6之后,为了减少获得锁和释放锁所带来的性能消耗,引入了轻量级锁和偏向锁

      2、为什么每一个对象都可以成为一个锁?

      markOop.hpp

      Synchronized与锁升级

      Monitor可以理解为一种同步工具,也可理解为一种同步机制,常常被描述为一个Java对象。Java对象是天生的Monitor,每一个Java对象都有成为Monitor的潜质,因为在Java的设计中 ,每一个Java对象自打娘胎里出来就带了一把看不见的锁,它叫做内部锁或者Monitor锁。

      Synchronized与锁升级

      Monitor的本质是依赖于底层操作系统的Mutex Lock实现,操作系统实现线程之间的切换需要从用户态到内核态的转换,成本非常高。

      Monitor(监视器锁)

      Synchronized与锁升级

      Synchronized与锁升级

      Mutex Lock
      Monitor是在jvm底层实现的,底层代码是c++。本质是依赖于底层操作系统的Mutex Lock实现,操作系统实现线程之间的切换需要从用户态到内核态的转换,状态转换需要耗费很多的处理器时间成本非常高。所以synchronized是Java语言中的一个重量级操作。

      Monitor与java对象以及线程是如何关联 ?
      1.如果一个java对象被某个线程锁住,则该java对象的Mark Word字段中LockWord指向monitor的起始地址
      2.Monitor的Owner字段会存放拥有相关联对象锁的线程id

      Mutex Lock 的切换需要从用户态转换到核心态中,因此状态转换需要耗费很多的处理器时间。

      3、java6开始,优化Synchronized

      Java 6之后,为了减少获得锁和释放锁所带来的性能消耗,引入了轻量级锁和偏向锁

      需要有个逐步升级的过程,别一开始就捅到重量级锁

      3、Synchronized锁种类及升级步骤

      1、多线程访问情况,3种

      1)只有一个线程来访问,有且唯一Only One

      2)有2个线程A、B来交替访问

      3)竞争激烈,多个线程来访问

      2、升级流程

      synchronized用的锁是存在Java对象头里的Mark Word中锁升级功能主要依赖MarkWord中锁标志位和释放偏向锁标志位

      Synchronized与锁升级

      偏向锁:MarkWord存储的是偏向的线程ID;

      轻量锁:MarkWord存储的是指向线程栈中Lock Record的指针;

      重量锁:MarkWord存储的是指向堆中的monitor对象的指针;

      3、无锁

      public class MyObject
      {
      public static void main(String[] args)
      {
      Object o = new Object();

      System.out.println("10进制hash码:"+o.hashCode());
      System.out.println("16进制hash码:"+Integer.toHexString(o.hashCode()));
      System.out.println("2进制hash码:"+Integer.toBinaryString(o.hashCode()));

      System.out.println( ClassLayout.parseInstance(o).toPrintable());
      }
      }

      程序不会有锁的竞争

      Synchronized与锁升级

      4、偏锁

      • 当一段同步代码一直被同一个线程多次访问,由于只有一个线程那么该线程在后续访问时便会自动获得锁
      • 同一个老顾客来访,直接老规矩行方便

      Hotspot 的作者经过研究发现,大多数情况下:

      多线程的情况下,锁不仅不存在多线程竞争,还存在锁 由同一线程多次获得的情况,

      偏向锁就是在这种情况下出现的,它的出现是为了解决 只有在一个线程执行同步时提高性能。

      Synchronized与锁升级

      通过CAS方式修改markword中的线程ID

      1、偏向锁的持有

      理论落地: 在实际应用运行过程中发现,“锁总是同一个线程持有,很少发生竞争”,也就是说锁总是被第一个占用他的线程拥有,这个线程就是锁的偏向线程。

      那么只需要在锁第一次被拥有的时候,记录下偏向线程ID。这样偏向线程就一直持有着锁(后续这个线程进入和退出这段加了同步锁的代码块时,不需要再次加锁和释放锁。而是直接会去检查锁的对象头(MarkWord)里面是不是放的自己的线程ID)。 如果相等,表示偏向锁是偏向于当前线程的,就不需要再尝试获得锁了,直到竞争发生才释放锁。以后每次同步,检查锁的偏向线程ID与当前线程ID是否一致,如果一致直接进入同步。无需每次加锁解锁都去CAS更新对象头。如果自始至终使用锁的线程只有一个,很明显偏向锁几乎没有额外开销,性能极高。

      如果不等,表示发生了竞争,锁已经不是总是偏向于同一个线程了,这时候会尝试使用CAS来替换MarkWord里面的线程ID为新线程的ID,
      竞争成功,表示之前的线程不存在了,MarkWord里面的线程ID为新线程的ID,锁不会升级,认为偏向锁
      竞争失败,这时候可能需要升级为轻量级锁,才能保证线程间公平竞争锁
      注意:偏向锁只有遇到其他线程尝试竞争偏向锁时,持有偏向锁的线程才会释放锁,线程是不会主动释放偏向锁的

      技术实现: 一个synchronized方法被一个线程抢到了锁时,那这个方法所在的对象就会在其所在的Mark Word中将偏向锁修改状态位,同时还 会有占用前54位来存储线程指针作为标识。若该线程再次访问同一个synchronized方法时,该线程只需去对象头的Mark Word 中去判断一下是否有偏向锁指向本身的ID,无需再进入 Monitor 去竞争对象了。


      偏向锁的操作不用直接捅到操作系统,不涉及用户到内核转换,不必要直接升级为最高级,我们以一个account对象的“对象头”为例

      Synchronized与锁升级

      假如有一个线程执行到synchronized代码块的时候,JVM使用CAS操作把线程指针ID记录到Mark Word当中,并修改标偏向标示,标示当前线程就获得该锁。锁对象变成偏向锁(通过CAS修改对象头里的锁标志位),字面意思是“偏向于第一个获得它的线程”的锁。执行完同步代码块后,线程并不会主动释放偏向锁。

      Synchronized与锁升级

      这时线程获得了锁,可以执行同步代码块。当该线程第二次到达同步代码块时会判断此时持有锁的线程是否还是自己(持有锁的线程ID也在对象头里),JVM通过account对象的Mark Word判断:当前线程ID还在,说明还持有着这个对象的锁,就可以继续进入临界区工作。由于之前没有释放锁,这里也就不需要重新加锁。 如果自始至终使用锁的线程只有一个,很明显偏向锁几乎没有额外开销,性能极高。

      结论:JVM不用和操作系统协商设置Mutex(争取内核),它只需要记录下线程ID就标示自己获得了当前锁,不用操作系统接入。
      上述就是偏向锁:在没有其他线程竞争的时候,一直偏向偏心当前线程,当前线程可以一直执行。

      2、偏向锁的撤销

      当有另外线程逐步来竞争锁的时候,就不能再使用偏向锁了,要升级为轻量级锁

      竞争线程尝试CAS更新对象头失败,会等待到全局安全点(此时不会执行任何代码)撤销偏向锁。

      偏向锁使用一种等到竞争出现才释放锁的机制,只有当其他线程竞争锁时,持有偏向锁的原来线程才会被撤销。
      撤销需要等待全局安全点(该时间点上没有字节码正在执行),同时检查持有偏向锁的线程是否还在执行:

      ① 第一个线程正在执行synchronized方法(处于同步块),它还没有执行完,其它线程来抢夺,该偏向锁会被取消掉并出现锁升级。
      此时轻量级锁由原持有偏向锁的线程持有,继续执行其同步代码,而正在竞争的线程会进入自旋等待获得该轻量级锁。
      ② 第一个线程执行完成synchronized方法(退出同步块),则将对象头设置成无锁状态并撤销偏向锁,重新偏向 。

      Synchronized与锁升级

      3、总体步骤流程图示

      Synchronized与锁升级

      偏向锁在Java15逐步废弃

      5、轻锁

      有线程来参与锁的竞争,但是获取锁的冲突时间极短。本质就是自旋锁

      Synchronized与锁升级

      轻量级锁是为了在线程近乎交替执行同步块时提高性能。
      主要目的: 在没有多线程竞争的前提下,通过CAS减少重量级锁使用操作系统互斥量产生的性能消耗,说白了先自旋再阻塞。
      升级时机: 当关闭偏向锁功能或多线程竞争偏向锁会导致偏向锁升级为轻量级锁

      假如线程A已经拿到锁,这时线程B又来抢该对象的锁,由于该对象的锁已经被线程A拿到,当前该锁已是偏向锁了。
      而线程B在争抢时发现对象头Mark Word中的线程ID不是线程B自己的线程ID(而是线程A),那线程B就会进行CAS操作希望能获得锁。
      此时线程B操作中有两种情况:
      如果锁获取成功,直接替换Mark Word中的线程ID为B自己的ID(A → B),重新偏向于其他线程(即将偏向锁交给其他线程,相当于当前线程"被"释放了锁),该锁会保持偏向锁状态,A线程Over,B线程上位;

      Synchronized与锁升级

      如果锁获取失败,则偏向锁升级为轻量级锁,此时轻量级锁由原持有偏向锁的线程持有,继续执行其同步代码,而正在竞争的线程B会进入自旋等待获得该轻量级锁。

      Synchronized与锁升级

      自旋次数和程度自适应:意味着自旋的次数不是固定不变的,而是根据:同一个锁上一次自旋的时间。拥有锁线程的状态来决定。

      轻量锁与偏向锁的区别和不同

      争夺轻量级锁失败时,自旋尝试抢占锁。轻量级锁每次退出同步块都需要释放锁,而偏向锁是在竞争发生时才释放锁

      6、重锁

      有大量的线程参与锁的竞争,冲突性很高

      Synchronized与锁升级

      Synchronized与锁升级

      7、总结

      各种锁优缺点、synchronized锁升级和实现原理

      Synchronized与锁升级

      synchronized锁升级过程总结:一句话,就是先自旋,不行再阻塞。
      实际上是把之前的悲观锁(重量级锁)变成在一定条件下使用偏向锁以及使用轻量级(自旋锁CAS)的形式

      synchronized在修饰方法和代码块在字节码上实现方式有很大差异,但是内部实现还是基于对象头的MarkWord来实现的。
      JDK1.6之前synchronized使用的是重量级锁,JDK1.6之后进行了优化,拥有了无锁->偏向锁->轻量级锁->重量级锁的升级过程,而不是无论什么情况都使用重量级锁。

      偏向锁:适用于单线程适用的情况,在不存在锁竞争的时候进入同步方法/代码块则使用偏向锁。
      轻量级锁:适用于竞争较不激烈的情况(这和乐观锁的使用范围类似), 存在竞争时升级为轻量级锁,轻量级锁采用的是自旋锁,如果同步方法/代码块执行时间很短的话,采用轻量级锁虽然会占用cpu资源但是相对比使用重量级锁还是更高效。
      重量级锁:适用于竞争激烈的情况,如果同步方法/代码块执行时间很长,那么使用轻量级锁自旋带来的性能消耗就比使用重量级锁更严重,这时候就需要升级为重量级锁。

      8、JIT编译器对锁的优化

      Just In Time Compiler,一般翻译为即时编译器

      锁消除:

      /**
      * 锁消除
      * 从JIT角度看相当于无视它,synchronized (o)不存在了,这个锁对象并没有被共用扩散到其它线程使用,
      * 极端的说就是根本没有加这个锁对象的底层机器码,消除了锁的使用
      */
      public class LockClearUPDemo
      {
      static Object objectLock = new Object();//正常的

      public void m1()
      {
      //每个线程new一把锁
      //锁消除,JIT会无视它,synchronized(对象锁)不存在了。不正常的
      Object o = new Object();

      synchronized (o)
      {
      System.out.println("-----hello LockClearUPDemo"+"\t"+o.hashCode()+"\t"+objectLock.hashCode());
      }
      }

      public static void main(String[] args)
      {
      LockClearUPDemo demo = new LockClearUPDemo();

      for (int i = 1; i <=10; i++) {
      new Thread(() -> {
      demo.m1();
      },String.valueOf(i)).start();
      }
      }
      }

      锁粗化:

      /**
      * 锁粗化
      * 假如方法中首尾相接,前后相邻的都是同一个锁对象,那JIT编译器就会把这几个synchronized块合并成一个大块,
      * 加粗加大范围,一次申请锁使用即可,避免次次的申请和释放锁,提升了性能
      */
      public class LockBigDemo
      {
      static Object objectLock = new Object();


      public static void main(String[] args)
      {
      new Thread(() -> {
      synchronized (objectLock) {
      System.out.println("11111");
      }
      synchronized (objectLock) {
      System.out.println("22222");
      }
      synchronized (objectLock) {
      System.out.println("33333");
      }
      //--------------------------
      synchronized (objectLock) {
      System.out.println("11111");
      System.out.println("22222");
      System.out.println("33333");
      }
      },"a").start();
      }
      }
      版权声明:本文内容来自第三方投稿或授权转载,原文地址:https://blog.51cto.com/u_14452299/6011678,作者:鱼找水需要时间,版权归原作者所有。本网站转在其作品的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如因作品内容、版权等问题需要同本网站联系,请发邮件至ctyunbbs@chinatelecom.cn沟通。

      上一篇:linux grep命令详解

      下一篇:23.JSP 隐式对象

      相关文章

      2024-06-13 08:12:14

      vue项目中利用锁控制页面响应式布局

      响应式布局,就是页面布局跟随屏幕分辨率自动变化。响应式布局跟自适应布局不一样。自适应布局就是用百分比来定义页面内各布局元素,在屏幕分辨率发生变化时,不至于错位。

      2024-06-13 08:12:14
      vue , 锁
      2024-06-03 09:10:05

      手写可重入锁

      手写可重入锁

      2024-06-03 09:10:05
      锁
      2023-07-28 07:35:51

      MYSQL锁

      前言:MySQL锁是真对客户端而言的,我们可以在客户端获取数据库中表的不同类型锁,来实现对表的锁定操作。个人理解这个锁主要限制有两点,1)限制自己,即限定自己只能对当前输定的表操作。2)限定别人,即可以限定别人查看或更新该锁定的表;一:语法

      2023-07-28 07:35:51
      MYSQL , 锁
      2023-07-19 08:13:00

      Synchronized 原理与锁升级

      什么是线程安全多线程访问了共享的数据,就会产生线程的安全举例多个窗口,同时卖一种票,如果不进行控制,可以会出现卖重复票的现象代码实现编写卖票线程业务,然后开启多线程同时执行,代码如下最终观察结果发现出现了如上所说的问题,出现了重复的票,如下

      2023-07-19 08:13:00
      线程
      2023-07-19 07:45:30

      python使用多线程写入数据到文件

      python使用多线程写入数据时,可能会存在写入的一些数据丢失现象。如示例代码1所示,反复修改写入文件的两种方式和加入b

      2023-07-19 07:45:30
      python , 线程 , 锁
      2023-07-03 08:04:07

      oracle 锁

      在介绍oracle的锁之前,先介绍一下什么叫阻塞,这个相信大家都遇到过。阻塞和死锁是两回事,这个可能会经常混淆。 阻塞: 一个sessi

      2023-07-03 08:04:07
      oracle , 锁
      2023-06-14 09:10:42

      掌控MySQL并发:深度解析锁机制与并发控制

      前一篇MySQL读取的记录和我想象的不一致——事物隔离级别和MVCC讲了事务在并发执行时可能引发的一致性问题的各种现象。一般分为下面3种情况:读 - 读情况:并发事务相继读取相同的记录。读取操作本身不会对记录有任何影响,不会引起什么问题,所

      2023-06-14 09:10:42
      MySQL , 并发 , 锁
      2023-06-12 09:39:03

      深度分析Redis分布式锁在电商超卖业务场景下的使用

      专注于PHP、MySQL、Linux和前端开发,感兴趣的感谢点个关注哟!!!文章整理在GitHub,Gitee主要包含的技术有PHP、Redis、MySQL、JavaScript、HTML&CSS、Linux、Java、Golang

      2023-06-12 09:39:03
      Redis , 节点 , 锁
      2023-06-12 09:25:54

      Redisson中的“琐事”

      文章目录​​前言​​​​锁分类​​​​Redisson​​​​可重入锁(Reentrant Lock)​​​​公平锁(Fair Lock)​​​​联锁(MultiLock)​​​​红锁(RedLock)​​​​读写锁(ReadWriteLo

      2023-06-12 09:25:54
      redis , 线程 , 锁
      2023-06-06 05:57:21

      《MySQL高级篇》十三、锁

      《MySQL高级篇》十三、锁

      2023-06-06 05:57:21
      mysql , 锁
      查看更多
      推荐标签

      作者介绍

      天翼云小翼
      天翼云用户

      文章

      33561

      阅读量

      5242972

      查看更多

      最新文章

      vue项目中利用锁控制页面响应式布局

      2024-06-13 08:12:14

      手写可重入锁

      2024-06-03 09:10:05

      MYSQL锁

      2023-07-28 07:35:51

      python中的互斥锁Lock

      2023-06-01 06:39:36

      【Linux】Linux文件锁

      2023-05-18 09:32:05

      查看更多

      热门文章

      【Linux】Linux文件锁

      2023-05-18 09:32:05

      python中的互斥锁Lock

      2023-06-01 06:39:36

      MYSQL锁

      2023-07-28 07:35:51

      手写可重入锁

      2024-06-03 09:10:05

      vue项目中利用锁控制页面响应式布局

      2024-06-13 08:12:14

      查看更多

      热门标签

      linux java python javascript 数组 前端 docker Linux vue 函数 shell git 节点 容器 示例
      查看更多

      相关产品

      弹性云主机

      随时自助获取、弹性伸缩的云服务器资源

      天翼云电脑(公众版)

      便捷、安全、高效的云电脑服务

      对象存储

      高品质、低成本的云上存储服务

      云硬盘

      为云上计算资源提供持久性块存储

      查看更多

      随机文章

      MYSQL锁

      vue项目中利用锁控制页面响应式布局

      python中的互斥锁Lock

      【Linux】Linux文件锁

      手写可重入锁

      • 7*24小时售后
      • 无忧退款
      • 免费备案
      • 专家服务
      售前咨询热线
      400-810-9889转1
      关注天翼云
      • 旗舰店
      • 天翼云APP
      • 天翼云微信公众号
      服务与支持
      • 备案中心
      • 售前咨询
      • 智能客服
      • 自助服务
      • 工单管理
      • 客户公告
      • 涉诈举报
      账户管理
      • 管理中心
      • 订单管理
      • 余额管理
      • 发票管理
      • 充值汇款
      • 续费管理
      快速入口
      • 天翼云旗舰店
      • 文档中心
      • 最新活动
      • 免费试用
      • 信任中心
      • 天翼云学堂
      云网生态
      • 甄选商城
      • 渠道合作
      • 云市场合作
      了解天翼云
      • 关于天翼云
      • 天翼云APP
      • 服务案例
      • 新闻资讯
      • 联系我们
      热门产品
      • 云电脑
      • 弹性云主机
      • 云电脑政企版
      • 天翼云手机
      • 云数据库
      • 对象存储
      • 云硬盘
      • Web应用防火墙
      • 服务器安全卫士
      • CDN加速
      热门推荐
      • 云服务备份
      • 边缘安全加速平台
      • 全站加速
      • 安全加速
      • 云服务器
      • 云主机
      • 智能边缘云
      • 应用编排服务
      • 微服务引擎
      • 共享流量包
      更多推荐
      • web应用防火墙
      • 密钥管理
      • 等保咨询
      • 安全专区
      • 应用运维管理
      • 云日志服务
      • 文档数据库服务
      • 云搜索服务
      • 数据湖探索
      • 数据仓库服务
      友情链接
      • 中国电信集团
      • 189邮箱
      • 天翼企业云盘
      • 天翼云盘
      ©2025 天翼云科技有限公司版权所有 增值电信业务经营许可证A2.B1.B2-20090001
      公司地址:北京市东城区青龙胡同甲1号、3号2幢2层205-32室
      • 用户协议
      • 隐私政策
      • 个人信息保护
      • 法律声明
      备案 京公网安备11010802043424号 京ICP备 2021034386号