线程,锁的概念——码农翻身读后感

基础了解

   1. 单CPU中进程只能是并发,多CPU计算机中进程可以并行。
   2. 单CPU单核中线程只能并发,单CPU多核中线程可以并行。
   3. 无论是并发还是并行,使用者来看,看到的是多进程,多线程。

串行、并发、并行

    1. 串行
     多个任务执行时,一个任务执行完再执行另一个任务
    2. 并发
     多个线程在单个核心运行,同一时间一个线程运行,系统不停切换线程,看起来像同时运行,实际上是线程不停切换。
  即一个指令 和另一个指令交错执行,操作系统实现这种交错执行的机制称为:上下文切换。
  上下文是指操作系统保持跟踪进程或线程运行所需的所有状态信息,如寄存器文件的当前值、主存内容等。
    3. 并行
     每个线程分配给独立的核心,线程同时运行。
     单核CPU多个进程或多个线程内能实现并发(微观上的串行,宏观上的并行);多核CPU线程间可以实现微观上并行。

为什么要加锁

  因为在多线程时,系统在不停的切换线程。
  比如最常见的场景,你的账户有100块钱,你现在正在给账户里再冲100块。而此时你弟弟偷偷操作你的账户给游戏充50块钱。操作你数据的线程执行到100+100=200时线程中断,此时操作你弟弟数据的线程开始执行,当执行到100-50=50时线程中断,这时候你的线程又开始了,更新数据得到余额为200,你的线程结束任务,你弟弟的线程执行更新数据得到余额为50。你再次更余额发现你的余额为50,充的100块没有了(此时正确的余额应为150)。

死锁

  演员方:获取知名演员的锁成功,线程中断等待下次执行;
  导演方:获取知名导演的锁成功,线程中断等待下次执行;
  演员方:获取知名导演的锁失败,继续等待;
  导演方:获取知名演员的锁失败,继续等待;
  继续等待。。。。。。。。。。。。。。。。
  死锁,最终一个线程会被kill掉

如何申请锁

  应按照资源大小的顺序来申请锁,其实就是把资源变成数值来进行比较,列如可以用字符串的hacode值来比较。

未经允许不得转载,欢迎一起沟通交流,如果对你有帮助的话,请一定要抬手点一个赞

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值