版权声明:本文为博主原创文章,未经博主容许不得转载。编程
简单的介绍一下这三个函数,第一个函数有一个整形的参数,咱们能够理解为信号的总量,dispatch_semaphore_signal是发送一个信号,天然会让信号总量加1,dispatch_semaphore_wait等待信号,当信号总量少于0的时候就会一直等待,不然就能够正常的执行,并让信号总量-1,根据这样的原理,咱们即可以快速的建立一个并发控制来同步任务和有限资源访问控制多线程
int data = 3;并发
__block int mainData = 0;async
__block dispatch_semaphore_t sem = dispatch_semaphore_create(0);函数
dispatch_queue_t queue = dispatch_queue_create("StudyBlocks", NULL);post
dispatch_async(queue, ^(void) {ui
int sum = 0;spa
for(int i = 0; i < 5; i++).net
{线程
sum += data;
NSLog(@" >> Sum: %d", sum);
}
dispatch_semaphore_signal(sem);
});
dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER);
for(int j=0;j<5;j++)
{
mainData++;
NSLog(@">> Main Data: %d",mainData);
}
dispatch_release(sem);
dispatch_release(queue);
2013-07-08 11:33:05.654 dispatch[1102:1e03] >> Sum: 3
2013-07-08 11:33:05.656 dispatch[1102:1e03] >> Sum: 6
2013-07-08 11:33:05.657 dispatch[1102:1e03] >> Sum: 9
2013-07-08 11:33:05.658 dispatch[1102:1e03] >> Sum: 12
2013-07-08 11:33:05.659 dispatch[1102:1e03] >> Sum: 15
2013-07-08 11:33:05.660 dispatch[1102:c07] >> Main Data: 1
2013-07-08 11:33:05.660 dispatch[1102:c07] >> Main Data: 2
2013-07-08 11:33:05.660 dispatch[1102:c07] >> Main Data: 3
2013-07-08 11:33:05.661 dispatch[1102:c07] >> Main Data: 4
2013-07-08 11:33:05.661 dispatch[1102:c07] >> Main Data: 5
经过信号量就能够保证,Main Data 永远在Sum以后执行