关于这里的职能:
#include <libkern/OSAtomic.h>有OSAtomic和OSAtomicBarrier版本。
但是,文档没有显示以下示例代码:
OSAtomic是安全的,没有OSAtomicBarrier版本的OSAtomic是不安全的,但是OSAtomicBarrier是安全的。G 210
有人能提供解释+示例代码吗?
在没有实际代码的情况下随意乱写“你的意见”是毫无用处的。读者:请投下这样的答案,并用实际代码投票。
C/C++代码优先;程序集也好。
发布于 2010-03-31 21:43:25
在英特尔和单处理器平台上,这并不重要。
对于多处理器PPC系统,应该始终使用各种函数的屏障,除非原子存储不影响原子变量以外的数据。
下列情况将是不可能的:
data_structure[y].data++;
OSAtomicIncrement32(y);您必须在这里使用一个屏障,因为其他线程可能会认为data_structure过时了。
但是,如果您将原子变量用于某些独立的用途,则可能忽略了以下障碍:
// y is not used to access any other data
OSAtomicIncrement32(y);好的,只要y的值不影响任何共享数据结构的变量。
本质上,这是一个缓存刷新。您始终可以安全地使用屏障函数,但在某些情况下,您可以通过不使用屏障函数来提高性能,例如,如果没有相对于数据结构使用y。在没有障碍的情况下,使用这些函数的情况可能不多。
发布于 2013-08-27 23:52:45
我认为这篇文章更详细地解释了这里发生的事情:http://www.mikeash.com/pyblog/friday-qa-2011-03-04-a-tour-of-osatomic.html。读得很好。
https://stackoverflow.com/questions/2436513
复制相似问题