首页 文章
  • 47 votes
     answers
     views

    x86中“PAUSE”指令的目的是什么?

    我正在尝试创建一个自旋锁的哑版 . 浏览网页时,我在x86中遇到了一个名为“PAUSE”的汇编指令,该指令用于向处理器提供当前在此CPU上运行自旋锁的提示 . 英特尔手册和其他可用信息说明了这一点 在大多数情况下,处理器使用此提示来避免内存顺序违规,从而大大提高了处理器性能 . 因此,建议在所有自旋等待循环中放置PAUSE指令 . 文档还提到“等待(一些延迟)”是指令的伪实现 . 上段的最后一...
  • 47 votes
     answers
     views

    x86中“PAUSE”指令的目的是什么?

    我正在尝试创建一个自旋锁的哑版 . 浏览网页时,我在x86中遇到了一个名为“PAUSE”的汇编指令,该指令用于向处理器提供当前在此CPU上运行自旋锁的提示 . 英特尔手册和其他可用信息说明了这一点 在大多数情况下,处理器使用此提示来避免内存顺序违规,从而大大提高了处理器性能 . 因此,建议在所有自旋等待循环中放置PAUSE指令 . 文档还提到“等待(一些延迟)”是指令的伪实现 . 上段的最后一...
  • 0 votes
     answers
     views

    如何使用信号量同步执行函数X和Y的3个进程?

    有3个进程同时执行 X() 和 Y() 重复执行 . 要求: 只有最多2个进程可以执行 Y() ,也就是说,当它看到另外两个进程正在执行 Y() 函数时,最后一个进程应跳过 Y() 函数 . 当前不允许执行 Y() 的进程仍应执行 X() 函数 . X() 可以同时由所有3个进程执行 这是我的伪代码,使用信号量的传统P和V操作定义,其中ProcA ProcB和ProcC是 conc...
  • 3 votes
     answers
     views

    了解信号量

    我正在阅读“操作系统概念”中的信号量(对于那些知道它的人),我认为我完全理解信号量,直到我读到这段经文: 信号量的关键方面是它们是以原子方式执行的 . 我们必须保证没有两个进程可以同时对同一个信号量执行等待和信号操作 . 并且: 如果硬件没有提供任何特殊的原子指令,我们可以使用任何软件解决方案来解决关键部分问题,其中关键部分包括等待和信号程序 . 这段经文指的是 Signal 和 Wait...
  • 1 votes
     answers
     views

    二进制信号量如何进行?

    出现以下问题时,我正在研究二进制信号量: 假设有3个并发进程和3个二进制信号量......信号量被初始化为S0 = 1,S1 = 0,S2 = 0 . 这些过程具有以下代码: Process P0: Process P1: Process P2: while (true){ wait(...
  • 1 votes
     answers
     views

    信号量:具有优先级的关键部分

    我正在用Java编写一个程序来处理Semaphores的任务 . 我对Semaphores和并发的想法还很陌生 . 问题描述如下: 布尔的向量V [] . 如果Pi需要使用临界区,则V [i]为"True" . 二进制信号量B []的向量,用于阻止进入其临界区的进程:B [i]将是信号量阻塞进程Pi . 只要需要唤醒阻塞进程以使用临界区,就会使用特殊的调度程序进程S...
  • 2 votes
     answers
     views

    C - 带信号量的多个叉子

    我最终试图解决 生产环境 者 - 消费者问题,但我首先需要能够使用信号量创建一个关键部分 . 我目前遇到的问题是当我运行程序时,关键部分有时会有多个进程进入它 . 我想在给定时间只有一个进程处于临界区 . 这是我目前的代码: #include <stdio.h> #include <stdlib.h> #include <errno.h> #include &l...
  • 2 votes
     answers
     views

    关于Bakery算法的一些常见问题

    我最近在学习中遇到了面包店算法,只需澄清一些事情 . 如果流程没有选择大于所有现有票证的票号,面包店算法是否可能违反互斥? 在关键部分之后将数字[i]设置为零,以便在没有争用的情况下取得成功吗? 并且是面包算法没有在实践中使用的原因之一,因为找到数组的最大值的过程是非原子的?我认为情况并非如此,因为这不是正确的理由 .

热门问题