码迷,mamicode.com
首页 > 其他好文 > 详细

使用自旋锁和互斥锁实现的原子属性的性能对比

时间:2015-08-11 13:48:08      阅读:190      评论:0      收藏:0      [点我收藏+]

标签:

代码:

#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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!