标签:
代码:
#import "ViewController.h" extern uint64_t dispatch_benchmark(size_t count, void (^block)(void)); @interface ViewController () // 原子属性 - 互斥锁实现 @property (strong, nonatomic) NSObject *obj1; // 原子属性 - 自旋锁实现 @property (strong, atomic) NSObject *obj2; @end @implementation ViewController - (void)touchesBegan:(nonnull NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event { size_t count = 1000000; // 性能测试 - 模拟原子属性 uint64_t time1 = dispatch_benchmark(count, ^{ self.obj1 = [[NSObject alloc] init]; }); NSLog(@"模拟的原子属性 = %llu ns", time1); // 性能测试 - 原子属性 uint64_t time2 = dispatch_benchmark(count, ^{ self.obj2 = [[NSObject alloc] init]; }); NSLog(@"原子属性 = %llu ns", time2); } // 重写set方法 - (void)setObj1:(NSObject *)obj1 { // 使用互斥锁模拟原子属性 @synchronized(self) { _obj1 = obj1; } } @end
输出:
模拟的原子属性 = 345 ns 原子属性 = 192 ns
总结:
原子属性是通过自旋锁实现的。本例中,模拟的原子属性是通过互斥锁实现的。
输出结果表明,自旋锁的实现比互斥锁的实现的性能更好。
标签:
原文地址:http://www.cnblogs.com/loftyspirit/p/4720733.html