GDC dispatch_semaphore
来源:互联网 发布:淘宝宝贝裂变软件免费 编辑:程序博客网 时间:2024/04/28 12:43
信号量是一个整形值并且具有一个初始计数值,并且支持两个操作:信号通知和等待。当一个信号量被信号通知,其计数会被增加。当一个线程在一个信号量上等待时,线程会被阻塞(如果有必要的话),直至计数器大于零,然后线程会减少这个计数。
在GCD中有三个函数是semaphore的操作,分别是:
dispatch_semaphore_create 创建一个semaphore
dispatch_semaphore_signal 发送一个信号
dispatch_semaphore_wait 等待信号
简单的介绍一下这三个函数,第一个函数有一个整形的参数,我们可以理解为信号的总量,dispatch_semaphore_signal是发送一个信号,自然会让信号总量加1,dispatch_semaphore_wait等待信号,当信号总量少于0的时候就会一直等待,否则就可以正常的执行,并让信号总量-1,根据这样的原理,我们便可以快速的创建一个并发控制来同步任务和有限资源访问控制
int data = 3;
__block int mainData = 0;
__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 < 5; i++)
{
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之后执行- GDC dispatch_semaphore
- GDC dispatch_semaphore
- GDC dispatch_semaphore
- GDC dispatch_semaphore
- GDC dispatch_semaphore
- GDC dispatch_semaphore 信号量 协调线程同步
- IOS GDC学习之 —— dispatch_semaphore
- dispatch_semaphore
- dispatch_semaphore
- dispatch_semaphore
- dispatch_semaphore
- GDC
- GCD dispatch_semaphore
- dispatch_semaphore使用方法
- ios--dispatch_semaphore
- dispatch_semaphore使用
- dispatch_semaphore信号量
- GCD-dispatch_semaphore
- iOS多线程的初步研究(九)-- dispatch源
- I/O复用模型之epoll学习
- 【CodeForces】35E Parade 线段树
- scala模式匹配和正则表达式
- ArrayList实现反转
- GDC dispatch_semaphore
- js正则表达式语法
- 【C语言复习(二十九)】可变参数的函数
- Validate and Format North American Phone Numbers (验证和格式化北美电话号码)
- 常用宏整理
- 机器学习之模型评估与模型选择(学习笔记)
- vim使用手册
- 使用PyQT编写界面程序
- 观察者模式的c++代码实现