【问题标题】:Does objective c need a standard to define a memory model like c++ 11?Objective c 是否需要一个标准来定义像 c++ 11 这样的内存模型?
【发布时间】:2018-08-06 06:21:44
【问题描述】:

我们知道 CPU 和编译器可能会重新排序我们的代码,当我们加载/存储共享内存时,如果我们不涉及锁(或一些类似的工具),结果是不确定的。 C++ 11 提出memory model 来定义多线程操作共享内存时的行为。

clang 或 CPU 会重新排序 OC 代码吗?如果是这样,OC 是否应该在 C++ 11 中拥有类似内存模型的标准?

【问题讨论】:

    标签: c++ ios objective-c clang


    【解决方案1】:

    您提供的内存模型链接基本上是在说:

    1. 线程之间存在竞争条件

    2. 缓存一致性问题,例如一个线程先写入 A 然后 B,但另一个线程在 A 上的更改之前看到 B 上的更改,这是真实的。

    3. 线程之间的无锁编程非常难以正确进行,但如果您喜欢以困难的方式做事,这就是绳索 (std::memory_order)。

    4. 使用锁原语(包括 std::mutex)是编写正确多线程代码的解决方案。

    即使 Objective-C 本身没有正式记录内存模型,也存在相同的数据竞争和一致性问题。并且使用正确的线程/锁定原语仍然是解决方案。

    【讨论】:

      猜你喜欢
      • 2014-10-28
      • 2011-12-26
      • 2016-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-20
      • 1970-01-01
      相关资源
      最近更新 更多