热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

稳住多线程翻车的现场

若有收获,请记得分享和转发哦前言先来看看虚构的小故事已经晚上11点了,程序员小明的双手还在键盘上飞舞着,眼神依然注视着的电脑屏幕。没办法这段时间公司业绩

ef7cee613bb7ca4c4f90f4f738e491a3.png

若有收获,请记得分享和转发哦

前言

先来看看虚构的小故事

已经晚上 11 点了,程序员小明的双手还在键盘上飞舞着,眼神依然注视着的电脑屏幕。

没办法这段时间公司业绩增长中,需求自然也多了起来,加班自然也少不了。

天气变化莫测,这时窗外下起了蓬勃大雨,同时闪电轰鸣。

但这一丝都没有影响到小明,始料未及,突然一道巨大的雷一闪而过,办公楼就这么停电了,随后整栋楼都在回荡着的小明那一声撕心裂肺的「卧槽」。

此时,求小明的心里面积有多大?

等小明心里平复后,突然肚子非常的痛,想上厕所,小明心想肯定是晚上吃的某堡王有问题。

整栋楼都停了电,小明两眼一抹黑,啥都看不见,只能靠摸墙的方法,一步一步的来到了厕所门口。

到了厕所(共享资源),由于实在太急,小明直接冲入了厕所里,用手摸索着刚好第一个门没锁门,便夺门而入。

这就荒唐了,这个门里面正好小红在上着厕所,正好这个厕所门是坏了的,没办法锁门。

黑暗中,小红虽然看不见,但靠着声音,发现自己面前的这扇门有动静,觉得不对劲,于是铆足了力气,用她穿着高跟鞋脚,用力地一脚踢了过去。

小明很幸运,被踢中了「命根子」,撕心裂肺地喊出了一个字「痛」!

故事说完了,扯了那么多,实际上是为了说明,对于共享资源,如果没有上锁,在多线程的环境里,那么就可能会发生翻车现场。

接下来,用 30+ 张图,带大家走进操作系统中避免多线程资源竞争的互斥、同步的方法。

1ef50183909eabfc7cd80f9d656d803e.png

正文

4221af08ab1f95831f513e7b82f64fbe.png

f55c19703cb2313057873fc564844d40.png

所以,线程之间是可以共享进程的资源,比如代码段、堆空间、数据段、打开的文件等资源,但每个线程都有自己独立的栈空间。

600771e27a500d92eb64f29bddb49997.png

02d1a8700ef2cbc7e9c170d137c54b98.png

ddb82f228051775ead938033a0cccc17.png

09e5f0faed11db3d1ae5e31b874c3eb7.png

47276ffeb92cd45df039f2d4918fb1ed.png

7bf292374883a307f409ed2e6fb90590.png

17b71196a4c198ce217a512ddfbeb03a.png

3d9adccbc7e6084ac14bfb88143e3e95.png

d0d4b7cb7b4d03dddfe18fd045e29d67.png

举个生活的同步例子,你肚子饿了想要吃饭,你叫妈妈早点做菜,妈妈听到后就开始做菜,但是在妈妈没有做完饭之前,你必须阻塞等待,等妈妈做完饭后,自然会通知你,接着你吃饭的事情就可以进行了。

124c02e230832d22c30215e0c1c2b8ce.png

6f198c0029b03ff7a40a908c70933f31.png

f6f3beb98e285236fc1289441687cc59.png

1c72840f8312fd918962b016fffbdedb.png

b4b58ce4cb07de129cbd844ad8ef7cf1.png

1f5fed3fc2f05b45eb274cd9fb49a9d4.png

51a280534d33e5a84606c8a57e5c1b92.png

63d8377e98bf0eb88bb03dec24d4e41a.png

aa3b5a16595a3e07a652f3d3839f2ee7.png

d4f587bf73e52f7083e7b6025cb59cad.png

79734d0a1765cc0e7185424251b78eb1.png

60528c2d72bd58a3e6f46ecec11172a2.png

8a757e55cfb539bf01dfaf23d74ebaa7.png

b32d76f52cde6fed3abf881e2272a169.png

086f1b5d41233a122b953f69604701f9.png

fd9423890c7cdc5200bc58f334076a40.png

3477c1f0c4d3fc2d3e9354d41eda620f.png

2e9e8e3e8e16f3cb05aff2cd3052baae.png

f8359c5edef41d94152ef3ebeb5a2cb7.png

8c0655158f538d374236e55d96745e45.png

当然,我这回答槽透了,所以当场 game over,残酷又悲惨故事,就不多说了,反正当时菜就是菜。

时至今日,看我来图解这道题。

0a916c602fb28d65d8432a1f1950850c.png

c1e7057827f1e7dfa5a8402ed7325905.png

5adf64eebba658e86a80fcb453575b5a.png

bf5ec794e0dbe219be66754a5041a3e6.png

959cfacfdae4eff79787de6711c343c1.png

055427225c855193929bb9e29b9a5614.png

1dd280d1cadc91ccc132f923e2de93c6.png

341cd4091b4db3e456464cba3ae78ba5.png

d1ecd56363cf683f3a8d5fd93869ff60.png

49b441f0e9406545772e3b2941a26460.png

043ecb3cd9301ef14eba5d684c6b12b8.png

8102e13d7f26dd21a275214753590fcf.png

347db7a7f264e3a842b4ff1f3634fa94.png

10c08584065b4fcb78850de41df81f0c.png

27b0d61e79abf25d821e042b75150dce.png

6f7ff25028ddc4d128e57e7d635fdccb.png

add6574717277435717feba93c540f1a.png

8d3a7e7a49314c223c206e6e04fb379a.png

ec9a28db056c134945d83d4bf0cfba1e.png

f91dab9e1238b1d32ecb4e1cb997a507.png

6c98e90d8c0f52125957a02a98bfa0a2.png

57e18408044737631cd6ff71774a1cc9.png

c75d1fcbbdbef1a573bb3ad7d9570370.png


推荐阅读
author-avatar
哥哥很霸道_277
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有