GCD 学习(八)dispatch_semaphore
2024-08-29 03:24:30
dispatch_semaphore 信号量基于计数器的一种多线程同步机制。在多个线程访问共有资源时候,会因为多线程的特性而引发数据出错的问题。
dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
dispatch_semaphore_t semaphore = dispatch_semaphore_create(1);
NSMutableArray *array = [NSMutableArrayarray];
for (int index = 0; index < 100000; index++) {
dispatch_async(queue, ^(){
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);//
NSLog(@"addd :%d", index);
[array addObject:[NSNumber numberWithInt:index]];
dispatch_semaphore_signal(semaphore);
});
}
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER); 如果semaphore计数大于等于1.计数-1,返回,程序继续运行。如果计数为0,则等待。这里设置的等待时间是一直等待。dispatch_semaphore_signal(semaphore);计数+1.在这两句代码中间的执行代码,每次只会允许一个线程进入,这样就有效的保证了在多线程环境下,只能有一个线程进入。
最新文章
- Java 中的值传递和参数传递
- ubuntu 跟xshell的问题
- iOS开发——UI基础-Xcode资源拷贝
- matlab矩阵合并及相关运算
- RHEL6解决无法使用YUM源问题
- android studio 智能提示忽略大小写
- [技术翻译] 构建现代化的Objective-C (下)
- 怎样在loop中处理异常
- 戏说HTML5(转)
- Delete 和 Put 请求失效, Spring 框架
- [C++ Primer Plus] 第5章、循环和关系表达式(一)程序清单——指针自加减优先级
- 使用Chrome开发者工具调试Android端内网页(微信,QQ,UC,App内嵌页等)
- Java8中的HashMap分析
- 【BZOJ4822】[CQOI2017]老C的任务(扫描线)
- day2(基础数据类型)
- Redhat/CentOS 制作本地yum源
- linux usb枚举过程分析之守护进程及其唤醒【转】
- JAVA-MyBatis ORM
- TYVJ 1940 创世纪
- PHP mysql 扩展库 操作mysql数据库步骤