找到 1282 篇文章 关于 MCA

操作系统中的 Dekker 算法

Arnab Chakraborty
更新于 2019 年 10 月 17 日 11:07:57

11K+ 次查看

Dekker 算法Dekker 算法是临界区问题的第一个解决方案。该算法有多个版本,第 5 版或最终版本满足以下所有条件,并且是所有版本中最有效的。临界区问题的解决方案必须确保以下三个条件:互斥进展有界等待第一个版本Dekker 算法成功实现了互斥。它使用变量来控制线程执行。它不断检查临界区是否可用。示例main(){    int thread_no = 1;    startThreads(); } Thread1(){    do {       // 进入区       // 等待直到 threadno 为 1       ... 阅读更多

函数式编程语言

Arnab Chakraborty
更新于 2019 年 10 月 17 日 10:53:32

483 次查看

函数式编程语言专门设计用于处理符号计算和列表处理应用程序。函数式编程基于数学函数。一些流行的函数式编程语言包括:Lisp、Python、Erlang、Haskell、Clojure 等。函数式编程语言分为两类,即:纯函数式语言 - 这些类型的函数式语言只支持函数式范式。例如 - Haskell。不纯函数式语言 - 这些类型的函数式语言支持函数式范式和命令式编程风格。例如 - LISP。函数式编程 - 特征函数式编程的特点如下:函数式编程语言的设计基于以下概念: ... 阅读更多

恢复进程实例的进程监控

Arnab Chakraborty
更新于 2019 年 10 月 17 日 10:51:37

605 次查看

如果多个进程挂起在条件 x 上,并且某个进程执行了 x.signal() 操作,那么我们可以通过一个简单的解决方案来确定接下来应该恢复哪个挂起的进程,即使用先进先出 (FCFS) 顺序,以便最先等待的进程首先恢复。然而,在许多情况下,这种简单的调度方案是不够的。因此,可以使用条件等待构造。此构造具有以下形式x.wait(c);这里 c 是在执行 wait() 操作时计算的整数表达式。c 的值,... 阅读更多

Peterson 问题

Arnab Chakraborty
更新于 2019 年 10 月 17 日 10:49:16

17K+ 次查看

Peterson 解决方案提供了解决临界区问题的一个很好的算法描述,并说明了在设计满足互斥、进展和有界等待要求的软件时涉及的一些复杂性。do {    flag[i] = true;    turn = j;    while (flag[j] && turn == j);    /* 临界区 */    flag[i] = false;    /* 剩余区 */ } while (true);Peterson 解决方案中进程 Pi 的结构。此解决方案仅限于两个进程,它们在其临界区和剩余区之间交替执行。这些进程编号为 P0 和 P1。我们使用 Pj ... 阅读更多

硬件同步

Arnab Chakraborty
更新于 2019 年 10 月 17 日 09:18:41

14K+ 次查看

在硬件同步中,我们探索了使用各种技术的临界区问题的几个其他解决方案,这些技术从硬件到软件基于 API 可供应用程序程序员使用。这些解决方案基于锁定的前提;但是,此类锁的设计可能非常复杂。这些硬件特性可以使任何编程任务更容易并提高系统效率。在这里,我们介绍一些在许多系统上可用的简单硬件指令,并展示如何有效地使用它们来解决临界区问题。如果我们能够防止在修改共享变量时发生中断。临界区问题可以 ... 阅读更多

Windows 线程的数据结构

Arnab Chakraborty
更新于 2019 年 10 月 17 日 09:10:35

536 次查看

Windows 实现 Windows API,它是 Microsoft 操作系统系列(Windows 98、NT、2000 和 XP 以及 Windows 7)的主要 API。基本上,Windows 应用程序作为单独的进程运行,并且每个进程可以包含一个或多个线程。此外,Windows 使用一对一映射,其中每个用户级线程映射到一个关联的内核线程。线程的一般组件包括:一个唯一标识线程的线程 ID一组表示处理器状态的寄存器一个用户栈,在线程以用户模式运行时使用,以及一个内核 ... 阅读更多

轻量级进程 (LWP)

Arnab Chakraborty
更新于 2019 年 10 月 17 日 09:07:48

3K+ 次查看

许多系统实现多对多或两级模型,在用户线程和内核线程之间放置一个中间数据结构。此数据结构(通常称为轻量级进程或 LWP)如下面的图所示。对于用户线程库,LWP 似乎是一个虚拟处理器,应用程序可以在其上调度用户线程运行。每个轻量级进程都附加到一个内核线程,并且操作系统将内核线程调度到物理处理器上运行。如果内核线程阻塞(例如,在等待 I/O 时),则 LWP 也将阻塞 ... 阅读更多

调度器激活

Arnab Chakraborty
更新于 2019 年 10 月 17 日 09:05:22

2K+ 次查看

用户线程库和内核之间通信的一种技术称为调度器激活。它的工作方式如下:内核为应用程序提供一组虚拟处理器 (LWP),并且应用程序可以在可用的虚拟处理器上调度用户线程。此外,内核必须通知应用程序某些事件。此过程称为上行调用。上行调用由线程库使用上行调用处理程序处理,并且上行调用处理程序必须在虚拟处理器上运行。触发上行调用的一个事件发生在应用程序线程即将阻塞时。在这种情况下,... 阅读更多

线程本地存储 (TLS)

Arnab Chakraborty
更新于 2019 年 10 月 17 日 09:03:18

804 次查看

线程共享其所属进程的数据。此数据共享提供了多线程编程的优势之一。但是,在某些情况下,每个线程可能需要其自身某些数据的副本。此类数据称为线程本地存储(或 TLS)。例如,在事务处理系统中,我们可能会在单独的线程中为每个事务提供服务。每个事务可能会分配一个唯一的标识符。为了将每个线程与其唯一的标识符关联起来,我们可以使用线程本地存储。很容易将 TLS 与局部变量混淆。仅在单个函数调用期间才能看到局部变量,而 TLS ... 阅读更多

什么是线程取消?

Arnab Chakraborty
更新于 2020 年 1 月 31 日 11:07:24

5K+ 次查看

在线程完成之前终止线程称为线程取消。例如,如果多个线程同时搜索数据库,并且一个线程返回结果,则可能会取消其余线程。另一种情况可能是当用户按下 Web 浏览器上的按钮以停止 Web 页面进一步加载时。通常,使用多个线程加载 Web 页面 - 每个图像都在单独的线程中加载。当用户在浏览器上按下停止按钮时,将取消加载页面的所有线程。一个线程将要 ... 阅读更多

广告