首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MacOSX: OSAtomic对OSAtomicBarrier

MacOSX: OSAtomic对OSAtomicBarrier
EN

Stack Overflow用户
提问于 2010-03-12 23:19:40
回答 2查看 3.1K关注 0票数 11

关于这里的职能:

代码语言:javascript
复制
#include <libkern/OSAtomic.h>

有OSAtomic和OSAtomicBarrier版本。

但是,文档没有显示以下示例代码:

  1. 什么时候使用OSAtomic是安全的,没有OSAtomicBarrier版本的
  2. 什么时候OSAtomic是不安全的,但是OSAtomicBarrier是安全的。

G 210

有人能提供解释+示例代码吗?

在没有实际代码的情况下随意乱写“你的意见”是毫无用处的。读者:请投下这样的答案,并用实际代码投票。

C/C++代码优先;程序集也好。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-03-31 21:43:25

在英特尔和单处理器平台上,这并不重要。

对于多处理器PPC系统,应该始终使用各种函数的屏障,除非原子存储不影响原子变量以外的数据。

下列情况将是不可能的:

代码语言:javascript
复制
data_structure[y].data++;
OSAtomicIncrement32(y);

您必须在这里使用一个屏障,因为其他线程可能会认为data_structure过时了。

但是,如果您将原子变量用于某些独立的用途,则可能忽略了以下障碍:

代码语言:javascript
复制
// y is not used to access any other data
OSAtomicIncrement32(y);

好的,只要y的值不影响任何共享数据结构的变量。

本质上,这是一个缓存刷新。您始终可以安全地使用屏障函数,但在某些情况下,您可以通过不使用屏障函数来提高性能,例如,如果没有相对于数据结构使用y。在没有障碍的情况下,使用这些函数的情况可能不多。

票数 7
EN

Stack Overflow用户

发布于 2013-08-27 23:52:45

我认为这篇文章更详细地解释了这里发生的事情:http://www.mikeash.com/pyblog/friday-qa-2011-03-04-a-tour-of-osatomic.html。读得很好。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2436513

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档