关于 OSAtomic

这篇博客介绍了iOS平台下使用OSAtomic进行原子操作的原理和示例,包括原子增加、比较和交换等,并通过对比展示了如何利用OSAtomic实现单例模式,与传统的@synchronized同步方法的区别在于效率和作用范围。
摘要由CSDN通过智能技术生成

一、原子操作

iOS平台下的原子操作函数都以OSAtomic开头,使用时需要包含头文件<libkern/OSBase.h>。不同线程如果通过原子操作函数对同一变量进行操作,可以保证一个线程的操作不会影响到其他线程内对此变量的操作,因为这些操作都是原子式的。因为原子操作只能对内置类型进行操作,所以原子操作能够同步的线程只能位于同一个进程的地址空间内。

原子操作是同步的一个简单的形式,它处理简单的数据类型。原子操作的优势是它们不妨碍竞争的线程。对于简单的操作,比如递增一个计数器,原子操作比使用锁具有更高的性能优势。

Mac OS X和iOS包含了许多在32位和64位执行基本的数学和逻辑运算的操作。这些操作都使用了原子版本来操作比较和交换,测试和设置,测试和清理等。查看支持原子操作的列表,参阅/user/include/libkern/OSAtomic.h头文件和参见atomic主页。


大部分原子函数的行为是相对简单的并应该是你想要的。然而列表4-1显式了测试-设置和比较-交换操作的原子行为,它们相对复杂一点。OSAtomicTestAndSet  第一次调用展示了如何对一个整形值进行位运算操作,而它的结果和你预期的有差异。最后两次调用OSAtomicCompareAndSwap32 显式它的行为。所有情况下,这些函数都是无竞争的下调用的,此时没有其他线程试图操作这些值。

[objc] view plaincopy
  1. int32_t  theValue = 0;  
  2. OSAtomicTestAndSet(0, &theValue);  
  3. // theValue is now 128.  
  4.    
  5. theValue = 0;  
  6. OSAtomicTestAndSet(7, &theValue);  
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值