当前位置: 首页 > 编程笔记 >

种族状况,临界区和信号灯

姜煌
2023-03-14
本文向大家介绍种族状况,临界区和信号灯,包括了种族状况,临界区和信号灯的使用技巧和注意事项,需要的朋友参考一下

竞争条件,关键部分和信号量是操作系统的关键部分。有关这些的详细信息如下-

比赛条件

竞态条件是可能在关键区域内发生的情况。当关键部分中多个线程执行的结果根据线程执行的顺序而不同时,会发生这种情况。

如果将关键部分视为原子指令,则可以避免关键部分的竞争条件。同样,使用锁或原子变量进行正确的线程同步也可以防止出现竞争情况。

临界区

可以访问共享变量的代码段中的关键部分。在关键部分需要原子动作,即一次只能在其关键部分执行一个过程。所有其他进程都必须等待在其关键部分执行。

关键部分如下:

do{
   Entry Section
   Critical Section
   Exit Section
   Remainder Section
} while (TRUE);

在上图中,输入部分处理了进入关键部分的操作。它获取流程执行所需的资源。退出部分处理关键部分的退出。它释放资源,并通知其他进程关键部分是免费的。

关键部分问题需要一个解决方案来同步不同的过程。关键截面问题的解决方案必须满足以下条件-

  • 互斥

    互斥意味着任何时候都只能在关键部分内进行一个过程。如果任何其他进程需要关键部分,则它们必须等待,直到其空闲为止。

  • 进展小号

    进度表示,如果某个进程未使用关键部分,则它不应阻止任何其他进程访问它。换句话说,任何进程都可以进入关键部分(如果空闲的话)。

  • 有界等待小号

    有界的等待意味着每个进程必须有有限的等待时间。它不应无休止地等待访问关键部分。

信号

信号量是一种信号传递机制,正在等待信号量的线程可以由另一个线程发出信号。这与互斥锁不同,因为互斥锁只能由调用等待html" target="_blank">功能的线程发出信号。

信号量使用两个原子操作,即等待和信号进行过程同步。

如果为正数,则等待操作会减小其参数S的值。如果S为负或零,则不执行任何操作。

wait(S){
   while (S<=0);
   S--;
}

信号运算会增加其参数S的值。

signal(S){
   S++;
}
 类似资料:
  • 主要内容:同步机制的要求临界区是试图访问共享资源的程序的一部分。 该资源可以是计算机中的任何资源,如内存位置,数据结构,CPU或任何IO设备。 临界区不能同时由多个进程执行; 操作系统在允许和禁止进程进入临界区时面临着困难。 临界区问题用于设计一组协议,可以确保进程间的竞争条件永远不会出现。 为了同步协作过程,我们的主要任务是解决临界区问题。 我们需要提供一个解决方案,以满足以下条件。 同步机制的要求 主 1. 相互排斥

  • 问题内容: 请从Linux,Windows角度进行解释? 我正在用C#编程,这两个术语会有所不同。请尽可能多地张贴带有示例等的内容。 谢谢 问题答案: 对于Windows,关键部分的权重比互斥轻。 互斥可以在进程之间共享,但是总是导致对内核的系统调用,这会产生一些开销。 关键部分只能在一个进程中使用,但具有的优势是,它们仅在争用的情况下才切换到内核模式- 无竞争的获取(这是常见的情况)非常快。在争

  • 在前一章中,我们看到了一个具有临界点的系统的例子,并且我们探索了临界系统 - 分形几何的一个共同特性。 在本章中,我们将探讨临界系统的另外两个性质:重尾分布,我们在第五章中见过,和粉红噪声,我将在本章中解释。 这些性质是部分有趣的,因为它们在自然界中经常出现;也就是说,许多自然系统会产生分形几何,重尾分布和粉红噪声。 这个观察提出了一个自然的问题:为什么许多自然系统具有临界系统的特性?一个可能的答

  • client 家族的组成 clientWidth 和 clientHeight 盒子调用时: clientWidth:获取盒子区域宽度(padding + width)。 clientHeight:获取盒子区域高度(padding + height)。 body/html调用时: clientWidth:获取网页可视区域宽度。 clientHeight:获取网页可视区域高度。 clientX 和

  • 问题内容: 有谁知道方法和()和和之间的差异。 您可以为每种方法公开伪代码吗? 问题答案: 从表面上看,这些方法的行为可能看起来很相似- 在某些情况下 可能使线程阻塞,在某些情况下可能会导致线程阻塞。但是,信号量和条件有不同的用途: 是相对较高级别的同步机制,供一般开发人员使用。您通常会使用它来限制对某些资源的并发访问,方法是在访问资源之前先进行每个请求者线程调用(如果没有信号灯许可,则使线程阻塞

  • 事件 signals and slots 被其他人翻译成信号和槽机制,(⊙o⊙)…我这里还是不翻译好了。 所有的应用都是事件驱动的。事件大部分都是由用户的行为产生的,当然也有其他的事件产生方式,比如网络的连接,窗口管理器或者定时器等。调用应用的exec_()方法时,应用会进入主循环,主循环会监听和分发事件。 在事件模型中,有三个角色: 事件源 事件 事件目标 事件源就是发生了状态改变的对象。事件是