GCD-semaphore(资源)-apply
来源:互联网 发布:付费语音问答源码 编辑:程序博客网 时间:2024/06/08 15:07
NSArray *array = [[NSArray alloc]initWithObjects:@(1), @(1), @(1), @(1), @(1), nil]; //创建一个信号源 __block dispatch_semaphore_t sem = dispatch_semaphore_create(0); dispatch_queue_t queue = dispatch_queue_create("StudyBlocks", NULL); dispatch_async(queue, ^(void) { int sum = 0; for(int i = 0; i < array.count; i++) sum += (int)array[i]; NSLog(@" >> Sum: %d", sum); //增加 semaphore 计数(可理解为资源数) dispatch_semaphore_signal(sem); }); //减少 semaphore 的计数,如果资源数少于 0就等待资源有资源了再去处理 dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER); dispatch_release(sem); dispatch_release(queue);
NSArray *array = [[NSArray alloc]initWithObjects:@(1), @(1), @(1), @(1), @(1), nil]; dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); __block int sum = 0; //dispatch_apply 的定义如下: //dispatch_apply(size_t iterations, dispatch_queue_t queue, void (^block)(size_t)); //参数 iterations 表示迭代的次数,void (^block)(size_t) 是 block 循环体。这么做与 for 循环相比有什么好处呢?答案是:并行,这里的求和是并行的,并不是按照顺序依次执行求和的。 dispatch_apply(array.count, queue, ^(size_t i) { sum += (int)array[i]; }); NSLog(@" >> sum: %d", sum); dispatch_release(queue);
0 0
- GCD-semaphore(资源)-apply
- IOS GCD的介绍及使用举例&GCD优先级改变、after、group、barrier、sync、apply、semaphore、once等操作方法
- IOS GCD的介绍及使用举例&GCD优先级改变、after、group、barrier、sync、apply、semaphore、o
- GCD信号量semaphore
- GCD系列:信号量(semaphore)
- GCD之Apply
- GCD学习之——Dispatch Semaphore
- java并发API: Semaphore管理资源许可
- iOS--GCD的常见用法,group、barrier、semaphore
- GCD实战2:资源竞争
- GCD实战2:资源竞争
- GCD实战2:资源竞争
- GCD实战2:资源竞争
- GCD实战2:资源竞争
- GCD实战2:资源竞争
- GCD实战2:资源竞争
- Semaphore
- semaphore
- 简单数据结构之栈模拟
- poj1324 Holedox Moving
- 基于ARM Contex-A8 Tiny210的简单室内人员数目监测系统实现(3)
- Laravel教程:laravel 4安装及入门
- conn.setAutoCommit()用法及作用
- GCD-semaphore(资源)-apply
- 美华裔男生入选美军预备军官 获25万美元奖学金
- .NET 程序集与命名空间
- 黑马程序员-高新注解学习日记
- EvtCleanupCallback
- git常用命令
- .NET 反射概述
- R语言基础教程1:数据类型
- http cache