【问题标题】:do assembly codes trying to reach same register, damage anything when in different threads?汇编代码是否试图到达相同的寄存器,在不同的线程中会损坏任何东西?
【发布时间】:2012-07-28 16:54:14
【问题描述】:

在线程中使用 __asm{} 代码是否危险?

例如,我有 2 个线程在一个内核上运行,而 main() 在另一个内核上运行。如果一个线程在 eax 上写入并读取 ebx,而另一个线程在 eax 上写入并在 ebx 上写入会发生什么?如果我从 main() 读取这些寄存器会发生什么?

【问题讨论】:

  • 你明白你的cpu运行的所有代码都是机器码,对吧?无论您使用asm 还是高级解释语言都不会改变任何事情。
  • 你是对的。我以为编译器会更改寄存器的名称,但我不知道。

标签: c++ multithreading thread-safety inline-assembly


【解决方案1】:

每个线程都有自己维护的一组寄存器。要么是因为它在不同的内核上运行,要么是操作系统在上下文切换时换出了寄存器。

【讨论】:

    【解决方案2】:

    只有您的“全局”(非堆栈)变量在线程之间共享。

    这是discussed already on SO

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-21
      • 2013-02-23
      • 1970-01-01
      • 2021-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-20
      相关资源
      最近更新 更多