美文网首页
双重锁引发的死锁

双重锁引发的死锁

作者: 赛非斯 | 来源:发表于2021-12-01 15:51 被阅读0次
  • 问题现象:我的一个系统级别的服务收不到亮灭屏广播了

  • 刚开始怀疑广播没发出来,加了一些log之后发现广播是发出去了
    再次怀疑系统挂了,但是我操作设置界面都正常
    最后怀疑系统服务anr了。导出来anr目录下的log,证实了我的猜想,系统服务anr了,而且是一个比较经典的死锁


  "main" prio=5 tid=1 Blocked
  | group="main" sCount=1 dsCount=0 flags=1 obj=0x718613c8 self=0x787fef0c00
  | sysTid=10206 nice=-2 cgrp=default sched=0/0 handle=0x7881458ed0
  | state=S schedstat=( 3115368842 2572364152 17598 ) utm=229 stm=82 core=3 HZ=100
  | stack=0x7ffab44000-0x7ffab46000 stackSize=8192KB
  | held mutexes=
  at com.android.server.BatteryService$LocalService.forceUpdatebattery(BatteryService.java:1323)
  - waiting to lock <0x0314588f> (a java.lang.Object) held by thread 108
  at com.android.server.lights.jioLedMangerService.PowerStateChanged(jioLedMangerService.java:357)
  at com.android.server.lights.jioLedMangerService.triggerLedEvent(jioLedMangerService.java:534)
  - locked <0x003f771c> (a com.android.server.lights.jioLedMangerService)
  at com.android.server.lights.jioLedMangerService$1.onReceive(jioLedMangerService.java:176)
  at android.app.LoadedApk$ReceiverDispatcher$Args.lambda$getRunnable$0$LoadedApk$ReceiverDispatcher$Args(LoadedApk.java:1550)
  at android.app.-$$Lambda$LoadedApk$ReceiverDispatcher$Args$_BumDX2UKsnxLVrE6UJsJZkotuA.run(lambda:-1)
  at android.os.Handler.handleCallback(Handler.java:883)
  at android.os.Handler.dispatchMessage(Handler.java:100)
  at android.os.Looper.loop(Looper.java:214)
  at com.android.server.SystemServer.run(SystemServer.java:554)
  at com.android.server.SystemServer.main(SystemServer.java:362)
  at java.lang.reflect.Method.invoke(Native method)
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:913)




"HwBinder:10206_3" prio=5 tid=108 Blocked
  | group="main" sCount=1 dsCount=0 flags=1 obj=0x137c4a18 self=0x77312b8000
  | sysTid=10492 nice=-2 cgrp=default sched=0/0 handle=0x7727e69d50
  | state=S schedstat=( 80180773 149114941 443 ) utm=4 stm=3 core=0 HZ=100
  | stack=0x7727d73000-0x7727d75000 stackSize=991KB
  | held mutexes=
  at com.android.server.lights.jioLedMangerService.updateBatteryLightsLocked(jioLedMangerService.java:223)
  - waiting to lock <0x003f771c> (a com.android.server.lights.jioLedMangerService) held by thread 1
  at invision.led.JioLedManger.updateBatteryLightsLocked(JioLedManger.java:122)
  at invision.led.JioLedMangerGlobal.updateBatteryLightsLocked(JioLedMangerGlobal.java:191)
  at com.android.server.BatteryService.processValuesLocked(BatteryService.java:669)
  at com.android.server.BatteryService.update(BatteryService.java:441)
  - locked <0x0314588f> (a java.lang.Object)
  at com.android.server.BatteryService.access$1100(BatteryService.java:119)
  at com.android.server.BatteryService$HealthHalCallback.healthInfoChanged(BatteryService.java:1145)
  at android.hardware.health.V2_0.IHealthInfoCallback$Stub.onTransact(IHealthInfoCallback.java:440)
  • 分析
    tid=1 jioLedMangerService 调用triggerLedEvent 的时候获得 0x003f771c 锁,当执行到forceUpdatebattery的时候想要获取 0x0314588f 锁 发现被 tid=108 持有 只能等着
    tid=108 BatteryService 调用update电量的时候获得 0x0314588f 锁, 当执行到 updateBatteryLightsLocked的时候想要获取 0x003f771c 锁 发现被tid=1 持有 只能等着

  • 解决:
    关闭一些没必要的锁

相关文章

  • 双重锁引发的死锁

    问题现象:我的一个系统级别的服务收不到亮灭屏广播了 刚开始怀疑广播没发出来,加了一些log之后发现广播是发出去了再...

  • 并发编程的10个坑

    并发编程10个坑: SimpleDateFormat线程不安全 双重检查锁的漏洞 volatile的原子性 死锁 ...

  • 死锁

    线程饥饿死锁 锁顺序死锁 动态锁顺序死锁通过锁顺序来避免死锁 避免死锁

  • Mysql学习(六) 行锁

    行锁、死锁、死锁监测 两阶段协议锁,如何安排正确的事务语句,可能影响并发度的锁尽量往后放 死锁和死锁监测,如何减少...

  • 死锁

    在JAVA编程中,有3种典型的死锁类型: 静态的锁顺序死锁 动态的锁顺序死锁 协作对象之间发生的死锁 静态的锁顺序...

  • 多线程

    实例:实时播放可以用到死锁:互斥锁+信号量:---》出现死锁互斥锁+条件量:---》不会死锁 。

  • Java concurrency《防止死锁》

    Java concurrency《防止死锁》 常见预防死锁的办法 有顺序的锁 具有超时时间的锁 死锁的检测 有顺序...

  • java并发编程实战10:活跃性、性能与测试

    10.1 死锁 10.1.1 锁顺序死锁 如果所有线程以固定的顺序来获得锁,那么在程序中就不会出现锁顺序死锁问题。...

  • Java多线程(下篇)

    一、死锁 1.同步锁 解决了线程安全问题,但会造成性能低下,还可能会引发一个问题(罕见):死锁 2.例子 a.一个...

  • 多线程二

    一、死锁 最容易导致死锁的一个情况信号锁 + 互斥锁 ,没处理好,导致死锁,NSConditionLock 解决死...

网友评论

      本文标题:双重锁引发的死锁

      本文链接:https://www.haomeiwen.com/subject/ysbsxrtx.html