码迷,mamicode.com
首页 > 移动开发 > 详细

ios 单一线程中使用nsoperation 会导致资源竞争吗?

时间:2015-10-15 16:06:35      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:

今天在处理多线程突然想到一个问题,多核处理器会不会导致,单一线程中,由runloop分发的2个函数同时执行呢?进而同时修改同一个变量,产生bug?

我做了以下的测试:

- (void)viewDidLoad {
    [super viewDidLoad];
    
    [self performSelectorOnMainThread:@selector(test1) withObject:nil waitUntilDone:NO];
    [self performSelectorOnMainThread:@selector(test2) withObject:nil waitUntilDone:NO];
    
    NSLog(@"view did load end!");
}


- (void)test1{
    for(int i = 0;i<10000;i++){
        NSLog(@"1111111111111111111");
    }

}

- (void)test2{
    for(int i = 0;i<10000;i++){
        NSLog(@"222222222222222222");
    }
}

结果就是11111全部输出完毕后,才有22222的输出,可见多核心的处理器,也会保证单一thread不出现并发执行2个函数的情况!

这个结论有什么用呢?大家可以看一下box 的api ,它里面的网络请求是用operationQueue发出的operation,但是真实的业务逻辑,是在自己创建的唯一一个thread中通过performSelector 执行的,所以无论多少的box 网络请求发出,都不会同时修改一个我定义的计数变量,这个变量是安全的!

ios 单一线程中使用nsoperation 会导致资源竞争吗?

标签:

原文地址:http://www.cnblogs.com/breezemist/p/4882513.html

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