Multithreading 互斥条件

Multithreading 互斥条件,multithreading,concurrency,operating-system,mutex,mutual-exclusion,Multithreading,Concurrency,Operating System,Mutex,Mutual Exclusion,我在读关于互斥条件的书,内容如下 两个过程在其临界截面内不得同时进行 没有对进程的相对速度或CPU的数量进行任何假设 任何流程都不应超出其关键部分,也不应阻止其他流程 任何进程都不应等待任意长的时间才能进入其关键部分 有人能给我解释一下第二点的含义吗?这意味着现在一天的CPU都是多核的,所以多编程是可能的。一个CPU可以同时运行多个pal程序。 但当你学习操作系统时,总是假设CPU只有一个核心,只能执行一个程序。 因此,本文没有对多个核心(CPU)进行任何假设。假设您知道您有一个处理器。我们还假

我在读关于互斥条件的书,内容如下

  • 两个过程在其临界截面内不得同时进行
  • 没有对进程的相对速度或CPU的数量进行任何假设
  • 任何流程都不应超出其关键部分,也不应阻止其他流程
  • 任何进程都不应等待任意长的时间才能进入其关键部分

  • 有人能给我解释一下第二点的含义吗?

    这意味着现在一天的CPU都是多核的,所以多编程是可能的。一个CPU可以同时运行多个pal程序。 但当你学习操作系统时,总是假设CPU只有一个核心,只能执行一个程序。
    因此,本文没有对多个核心(CPU)进行任何假设。

    假设您知道您有一个处理器。我们还假设处理器有一条原子指令BBSC(位集和集上的分支),该指令不能被中断,如果位被设置和未被设置,则该指令将被分支。分支清除并设置位

    然后可以使用这样的指令执行锁定

      BBSS DID_NOT_GET_LOCK, #1,LOCK_LOCATION
      ; Critical Section
    
      ; . ..  . . . .
    
     MOV #0, LOCK_LOCATION ; End critical section
    
    您没有获得\u锁:

    在这样的单处理器系统中,锁定变得很容易实现

    如果在混合中添加多个CPU,那么锁定系统将严重失败。我描述的指令至少有两个内存访问:

    如果(位已设置);记忆测试 转到目的地 其他的 设定位;存储集


    如果您有多个处理器,多个进程可以同时看到位是清晰的,并且可以进入关键部分。

    对我来说,这意味着您无法确定某个部分是正确的,因为它只是{少量}条指令。一个进程可能会被抢占,cpu可能会被挂起,遭受中断,或其他与这些假设不符的延迟


    对于任何可能的指令交错,并发代码都必须正确。

    第(2)部分中的哪一部分不清楚?有些系统有多个执行核心,有些指令的执行时间比其他指令长,有些线程的优先级可能比其他线程高。(2) 说这些应该是“不在乎”的问题。关键部分功能。这意味着,如果您的互斥体文档中说“此互斥体仅保证在具有1个CPU的系统上工作”,那么您的互斥体就不够好。:)