road道路上的死锁问题我在市区老城区的道路上遇到交通堵塞,无法动弹。后来我发现这是一个“僵局”。问题。当时,我坐在汽车③中,等待了很长时间。突然,我得了职业病。我想下车,向他们解释发生了什么,“死锁”如何发生。引起的原因以及如何避免它...有关简要说明,请参见下图。原因是右上方的小路一次只能通过一个方向的汽车。由于未找到停车位,因此大路上的红色汽车可能会停在路边,从而导致图中的汽车①,②,③,④,⑤不能行驶。实际上,在拥挤的道路上,如果没有交通指示,则容易引起这种“死锁”。下图显示了这种情况。除了交通问题外,我们来看一下Internet上的一张有趣图片(我们称它为人质问题,图片来自https://stackoverflow.com/questions/34512/what-is-一个称为“犯罪与警察现场”的僵局:很远,让我们来谈谈这种“僵局”。问题严重。 lock锁的概念什么是锁?实际上,这个概念很简单,它是我们通常看到的锁。实际上,操作系统已基于此概念制定了一组逻辑。从原理上来说,我仍然可以从现实生活中了解它。例如,如果您去买衣服,商店里有一个试衣间。当您想试衣服时,可能需要使用试衣间。当您进入试衣间时,必须锁上门,这意味着您当时占用了试衣间的资源。您可以在用完它时将其释放,然后其他人可以将其释放。用过的。试想一下,如果您不锁门,那么价格可能就是幸福的幸福……如果您从未在试衣间里买过衣服,那么就自己去上厕所吧。回到软件概念的锁上,通用操作系统将提供两个接口来访问此锁,一个是Acquire或Require / Get / Wait,另一个是Release,这意味着要占用并锁定资源并释放资源。通常,RTOS将使用信号量或互斥量来实现此锁定功能。当然,诸如Linux之类的复杂系统将具有更多类型的锁,例如旋转锁,互斥锁,读写锁等等。 the锁的作用有必要谈谈吗?只有一个目的。当您占领它时,您不想被别人占据。防止各种问题。例如,记住在上厕所时要锁好门,或者有人将其推开时,您会称某人为无赖,或者有人会称您为无赖,而您上厕所时就不会锁门。洗手间...另外,算了吧,程序员有女朋友吗?如果是这样,我将要证明这一点,并且长期的官方锁定是...哈哈哈▍死锁的原因场景1:使用嵌套锁/递归锁让我们看一下上面的代码:task1在第一个做某事Task2中被抢占,并且死锁开始了。使用嵌套锁时,会遇到死锁情况。递归锁(如果您使用过它们,则确实会怀疑自己被伪装成被强制使用的),也会出现此类问题。在实际的项目中,它可能更隐秘,并且需要一点思考才能找到它。方案2:锁尚未释放,但任务被杀死。 RTOS设计不是很聪明。当任务被杀死时,它所占用的资源可能不会自动释放。在关闭过程中很容易发生这种情况。设计必须非常小心。方案3:任务发送自己的邮箱以在任务之间进行通信。我们通常使用邮箱。同一任务的邮箱接口可以被其他多个任务调用,并且不会发生资源冲突。实际上,邮箱中还隐藏了锁定功能。一个任务调用邮箱接口,其他任务只能在调用后调用。通常定义的邮箱是空间有限的队列。频繁调用时,资源不足,不允许调用任务等待。这实际上是正常的。异常时,如果任务调用其自己的邮箱接口,将很容易下地狱。如果上图中task1的优先级非常低,并且定义的邮箱大小为4,则task2,task3,task4和task5都已调用它们,而task1没有时间来处理和释放邮箱资源。这时,task1的一些应用程序代码也需要发送一条消息,调用其邮箱接口,然后死掉。 :否允许使用嵌套锁,即在l中不使用锁