Objective-C Dispatch Queue API(3)

引用:《Objective-C高级编程》

1、Dispatch Semaphone

是持有计数的信号,可实现细粒度的排他控制。
多线程编程中可以用来控制最大线程数控制。

    dispatch_semaphore_t semaphore=dispatch_semaphore_create(1);
    dispatch_queue_t globQueue=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    NSMutableArray *ar=[[NSMutableArray alloc]init];
    @try {
        for(int i=0;i<100000;i++)
        {
            dispatch_async(globQueue, ^{
                //信号计数达到>=1的条件,dispatch_semaphore_wait 信号计数减1,并返回
                dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
                //信号计数变为0
                //执行对数组更新操作
                [ar addObject:[NSNumber numberWithInteger:i]];
                //数组操作完成后,排他控制处理结束,
                //通过dispatch_semaphore_signal ,信号量加1
                dispatch_semaphore_signal(semaphore);
                
                //如果有通过wait函数 等待 dispatch semaphore 计数增加的线程,由最先等待的线程先执行。
                
            });
            
        }
        
    } @catch (NSException *exception) {
        NSLog(@"error= %@",exception.description);
    } @finally {
        
    }

2、dispatch_once

dispatch_once 函数是保证在应用程序执行中只执行一次指定处理的API。
在单例模式中生成单例对象时使用

 static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        //initialize
    });
    

3、Dispatch I/O /Dispatch Data

用于较大文件的读写。
dispatch_io_create :生成Dispatch I/O
dispatch_io_set_low_water :设定一次读取的大小
dispatch_io_read :开始使用Global Dispatch Queue 开始并列读取。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值