前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >两个生活示例带你理解“线程同步原理”

两个生活示例带你理解“线程同步原理”

原创
作者头像
旺柴先生
修改2021-01-19 17:59:21
4090
修改2021-01-19 17:59:21
举报
文章被收录于专栏:旺柴先生旺柴先生

@旺柴先生

多个线程(或进程)要执行同一个特定的不可重入的程序代码块(称为临界区),这就需要适当的并发控制同步技术。否则,可能会发生竞态条件。

--维基百科

说白了就是但多个线程间同时要对某一区域块(临界区/临界资源)操作,需要运用一些技术手段来对临界资源进行保护,避免共同使用期间产生混乱。

举个简单的例子,我们支付宝给 🐶@旺柴先生 转账💰1RBM,这个时候同时也有另外一个人给他转账💰1RBM,这时他自己的钱包已经有1块钱来,但由于这两笔账是同时进账的,所以非线程同步系统会作出如下操作:

非线程同步最终取钱包余额为2元,显然是不对的,我们来看看加上线程同步后:

最终取钱包余额为3元,这里的解决方案采用了加锁🔒来解决,那么具体的都有哪几种方式呢?

我们这里也可以用一个更通俗的例子来说明:

  • 有一个新修建的十字路口,刚开始的适合这个路口没多少车辆🚗,大家每次到这个路口都很愉快地通过了
  • 可是慢慢的知道这条路的人越来越多,但是大家都没有秩序地通过路口,结果有一天就出了事故了,所以负责道路设施的人来装了一个红绿灯,只有这个方向的绿灯亮了,这个方向的人方可前行,这就是互斥锁
  • 而有的车辆到这里不一定是要过路口的,有的车辆这是到这里掉个头,所以负责道路设施的人就设计了一条掉头车道,允许掉头的车辆🚗通过,而不用跟直行车辆等待红灯才能掉头。这就是读写锁
  • 附近有家仓库发生火灾了,消防车占用了转弯车道(占用资源不释放,自己过了别人才能过),直到消防车队🚒🚒🚒通过后后面的车辆才能正常通行,这就是自旋锁
  • 这个路口是城区入口,久而久之交通压力变大,交通部门开始指定规定,早晚高峰时段外埠车辆禁止通行,且限号出现,这就是增加“条件变量”添加缓冲区缓解压力

有些例子可能不那么准确,比如自旋锁,但通过这个例子结合实际理论可我们可以快速理解记忆各个锁🔒的特点。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档