iOS GCD(7)

来源:未知 责任编辑:责任编辑 发表时间:2014-01-26 21:59 点击:

    });
   
    dispatch_async(queue, ^{
        NSLog(@"blk3_reading");
    });
    dispatch_async(queue, ^{
        NSLog(@"blk4_reading");
    });

 

如果像上面那样简单的在dispatch_async方法中添加写入数据处理的任务,那么根据Concurrent Dispatch Queue并行执行的性质,就很有可能不是按照上面的添加处理任务的

顺序执行,那么在blk3_reading 和 blk4_reading执行读取数据的时候,blk1_writting进行写入数据的处理还没有执行到,那么后两次的读取数据操作读取到的数据就与期望中

的不符了。

解决这个问题的处理就是 使用 dispatch_barrier_async

 


[cpp]
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0); 
    
   dispatch_async(queue, ^{ 
       //表示执行数据读取任务  
       NSLog(@"blk1_reading"); 
   }); 
   dispatch_async(queue, ^{ 
       NSLog(@"blk2_reading"); 
   }); 
    
   dispatch_barrier_async(queue, ^{ 
       //表示执行数据写入处理任务  
       NSLog(@"blk1_writting"); 
   }); 
    
   dispatch_async(queue, ^{ 
       NSLog(@"blk3_reading"); 
   }); 
   dispatch_async(queue, ^{ 
       NSLog(@"blk4_reading"); 
   }); 

 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);
   
    dispatch_async(queue, ^{
        //表示执行数据读取任务
        NSLog(@"blk1_reading");
    });
    dispatch_async(queue, ^{
        NSLog(@"blk2_reading");
    });
   
    dispatch_barrier_async(queue, ^{
        //表示执行数据写入处理任务
        NSLog(@"blk1_writting");
    });
   
    dispatch_async(queue, ^{
        NSLog(@"blk3_reading");
    });
    dispatch_async(queue, ^{
        NSLog(@"blk4_reading");

发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • Lexical or Preprocessor Issue 'xxx.h
  • ios学习笔记(二)xcode 4.3.2下实现基本交互
  • ios版本的helloworld
  • iphone(object-c) 内存管理(3) 有效的内存管理 前半部分
  • ios学习笔记(一)xcode 4.3.2下创建第一个ios项目
  • UITableView一些方法
  • IOS类似iphone通讯录TableView的完整demo【附源码】
  • [iPhone中级]iPhone团购信息客户端的开发 (二)
  • iphone(object-c)内存管理(1)
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1