java 进程 互斥锁_图解进程线程、互斥锁与信号量-看完不懂你来打我

f5807fc31a48ac4ea95d8b22a51f9a88.png

在上学的时候,老师讲到进程与线程的时候可能是这样讲的:进程是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程,是操作系统进行资源分配和调度的一个独立单元,是应用程序运行的载体。

线程是程序执行中一个单一的顺序控制流程,是程序执行流的最小单元,是处理器调度和分派的基本单位。一个进程可以有一个或多个线程,各个线程之间共享程序的内存空间(也就是所在进程的内存空间)。

2a4e5310da87d1187ec14549a8049df7.png

那个时候为了考试我都背下来了,但是心里想说:what?这都是些什么东西? 下面让我来试着用更通俗的语言来给你说说进程、线程、互斥锁、信号量的那些事。

一、房子与居住者

我们可以将自己平时住的房子类比为一个进程,每一个房间及其占用者比喻为一个线程。房子本身并不会做任何的事情,但是线程是房子里面每一个活跃的人,他们平时洗衣、做饭、看电视……,就像线程执行自己的代码一样在运行着。

6e48c94c672578210dc9efdad56e42a1.png

单线程

单线程就是一个叫做“进程”的房子里面,只住了你一个人,你可以在这个房子里面任何时间去做任何的事情。你是看电视、还是玩电脑,全都有你自己说的算。想干什么干什么,想什么时间做什么就什么时间做什么。

多线程

但是如果你处在一个“多人”的房子里面,每个房子里面都有叫做“线程”的住户:线程1、线程2、线程3、线程4,情况就不得不发生变化了。假如这些线程是你的老婆、孩子、父母。父母老人午睡的时候你不能开音响

老婆要看“甄嬛传”,你就不能看球赛

孩子没睡觉,你就别想看书

……

多线程出现这些问题的根本原因在于”共享资源“:时间、电视、厕所、厨房……等等。那我们下面来看看,如何处理协调使用这些"共享资源"?

二、锁(互斥锁)

在多线程编程中有”锁”的概念,在你的房子里面也有锁。如果你的老婆在上厕所并锁上门,她就是在独享这个“房子(进程)”里面的公共资源“卫生间”,如果你的家里只有这一个卫生间,你作为另外一个线程就只能先等待。

a0977e87fdd52fc7b268551057ff83b6.png

线程对锁的占用是有优先级的,就像在你的家里也有优先级。当你家只有一个卫生间的时候,孩子、老婆、你同时要去上厕所,通常来说 你的优先级是1,你老婆的优先级是100,你孩子的优先级是255。需要说明的是:数值越小优先级越低。但是不同的情况下会有不同的优先级调度算法,关键核心因子是优先级设置与等待时间,如果你确实等待了很长时间,老婆孩子可能看你快憋不住了,让你先去使用洗手间也是可以的。

三、信号量

现在让我们从卫生间走入厨房,首先我们要明确的一点是:厨房里面可以有一个人,也可以有多个人。

那我们怎么控制使用“厨房”这个公共资源的人数(线程数)?一个比较好的方法就是使用信号量。

b1ec62ba937f6d4b19ecfb862f0a7130.png

“信号量”在编程术语中使用单词semaphore,那什么是“信号量”?信号量就好比你家厨房入口架子上摆了三把锅:如果你的孩子热奶拿走一把,你的老婆热汤拿走一把,你的妈妈做菜拿走一把,你想煮面条就没有锅了。当你看到这种情况,你就不会进入厨房了,也就说厨房按照“锅的数量”作为信号量,只能容纳三个人(线程)。

当你的老婆热完汤之后,把锅重新放回架子上,你就可以去获得一个锅,你就可以进入厨房了。

所以说:当信号量总数为1的时候,也就是你家只有一把锅,此时信号量作用就等同于互斥锁。

四、专业点好么

来一张专业点的图,别让您误会我是讲故事的。讲技术,我可是认真的!

85485bdec1b8c6da467b4a54698a18e5.png

欢迎关注我的博客,里面有很多精品合集本文转载注明出处(必须带连接,不能只转文字):字母哥博客。

觉得对您有帮助的话,帮我点赞、分享!您的支持是我不竭的创作动力! 。另外,笔者最近一段时间输出了如下的精品内容,期待您的关注。《手摸手教你学Spring Boot2.0》

《Spring Security-JWT-OAuth2一本通》

《实战前后端分离RBAC权限管理系统》

《实战SpringCloud微服务从青铜到王者》

《VUE深入浅出系列》

b739ec46bb5c46d9c0aa4ce35ba1ea56.png

关于找一找教程网

本站文章仅代表作者观点,不代表本站立场,所有文章非营利性免费分享。

本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章,希望广大程序员努力学习,让我们用科技改变世界。

[图解进程线程、互斥锁与信号量-看完不懂你来打我]http://www.zyiz.net/tech/detail-146707.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值