即使在单个核心上,也不能假设操作是原子的.这可能是你在汇编程序中编码的情况,但是,如果按照你的问题用C++进行编码,你就不知道它将编译成什么.
您应该依赖于您编码的抽象级别的同步原语.在你的情况下,这是线程调用C++.它们是pthreads,Windows线程还是其他东西.
这与我在另一个答案中给出的相同的推理是否i ++是线程安全的.最重要的是,您不知道,因为您没有编码到那个级别(如果您正在使用内联汇编程序和/或您理解并且可以控制在幕后发生的事情,那么您将不再编码C++级别,你可以忽略我的建议).
操作系统和/或操作系统类型的库对它们运行的环境有很多了解,远远超过C++编译器.使用适当的同步原语将为您节省大量的焦虑.
它将具有与单核相同的缺陷,但由于必须在核之间进行L1高速缓存同步而具有额外的延迟.
注意 - "你可以在不同步的情况下完成"并不总是一个真实的陈述.
即使在单一机器上,也绝对不能保证在没有明确同步的情况下这将工作.
有几个原因:
如果要在两个线程之间进行正确的通信,则需要某种同步.总是,没有例外.
该同步可以是OS或线程API提供的互斥锁,也可以是CPU特定的原子指令,或者只是普通的内存屏障.
| 归档时间: |
|
| 查看次数: |
2027 次 |
| 最近记录: |