chapter15_原子变量与非阻塞同步机制_1_锁的劣势

博客介绍了内置锁和volatile机制的特性。内置锁可让线程独占访问守护变量,多线程请求锁时,未获锁线程会被挂起,挂起和恢复开销大。而volatile机制更轻量,使用时无上下文切换等操作,但只提供可见性,不能保证原子操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 内置锁的特性

    无论哪个线程持有守护变量的锁, 它都可以用独占的方式来访问这些变量, 并且对变量的任何修改对随后获得这个锁的线程都可见

  • 多个线程同时请求锁时会发生的现象

    (1) 一个线程获得锁, 其他线程被挂起并且在稍后恢复运行

    (2) 当线程恢复运行时, 必须等待其他线程执行完它们的时间片, 才会被调度

    结论: 在挂起和恢复线程时存在巨大的开销

  • volatile的机制

    (1) 使用volatile时不会发生上下文切换、线程调度等操作, 因此更__轻量__

    (2) 但是问题是volatile只提供可见性, 不能保证原子操作(例如简单的i++)

    i++编译出的指令有4条

      getstatic;          从内存中获取i的值---> 这步获取的值一定是对的
      iconst_1;
      idd;                执行这两步的时候其他线程可以把i在内存中的值改掉,于是栈顶的值是一个过期值
      putstatic;          此时再同步回主内存的值是一个偏小的值,因为其他线程++修改的结果没有用上
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值