multithreading - 比较并交换-如果2个处理器同时执行锁定怎么办?

原文 标签 multithreading linux-kernel locking compare-and-swap

我在https://en.wikipedia.org/wiki/Compare-and-swap中阅读了有关CAS的信息,但有一些疑问:

  • 即使在单个指令中实现了单个锁定操作,但是如果2个线程在2个不同的处理器上运行,则2条指令可能会同时发生。那不是比赛条件吗?
  • 我在<Linux Kernel Development> 3rd页面168中看到以下句子。

  • because a process can execute on only one processor at a time



    我怀疑,不确定它的字面意思。如果该进程具有多个线程,它们不能同时在多个处理器上运行怎么办?
    有人帮助解释这些疑问吗?谢谢。

    最佳答案

    CPU具有用于内存的缓存,通常每个所谓的缓存行的大小为64字节。它将针对该大小的块进行处理。特别是,在执行cmcmchg锁定或类似操作时,在其上执行此操作的硬件线程将与其他线程协商对内存的64字节部分的独占访问。这就是为什么它起作用。

    通常,您想读这本书:https://www.kernel.org/pub/linux/kernel/people/paulmck/perfbook/perfbook.html

    在第21页上对此特殊位进行了说明。

    关于LKD报价,没有提供上下文。可以肯定地认为它们是线程,并且正在更新线程本地计数器。

    关于multithreading - 比较并交换-如果2个处理器同时执行锁定怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38930436/

    相关文章:

    c - 在makefile中使用“all”

    c - 当按值传递静态变量导致c中的竞争条件时

    android - 是否为Android/Iphone设备上的金融应用程序提供了足够安全的手势锁定功能

    c# - 难道不是盲目的使用InvokeRequired吗?

    java - WEB应用程序中的缓存线程池性能

    linux - 可以在arm linux中将七个以上的参数传递给系统调用吗?

    c - 如何在嵌入式Linux上找到显示库

    c++ - 有条件使用std::lock_guard

    multithreading - C#处理线程和阻塞套接字

    java - 多线程MVC可使用多个独立仪表重新创建平面仪表板