目标c是否需要一个标准来定义像c++11这样的内存模型



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

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

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

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

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

  3. 线程之间的无锁编程非常难做到,但如果你喜欢用困难的方式做事,这里有绳索(std::memory_order(。

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

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

最新更新