博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
信号量与并发控制
阅读量:6072 次
发布时间:2019-06-20

本文共 1817 字,大约阅读时间需要 6 分钟。

未使用信号量控制并发

代码

#import "ViewController.h"@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad {    [super viewDidLoad];        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{        for (NSUInteger i = 0;  i < 10; ++i) {            NSLog(@"Task - 1");        }    });        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{        for (NSUInteger i = 0;  i < 10; ++i) {            NSLog(@"Task - 2");        }    });}@end复制代码

输出

Task - 1 Task - 2 Task - 1 Task - 2 Task - 1 Task - 2 Task - 1 Task - 2 Task - 1 Task - 2 Task - 1 Task - 2 Task - 1 Task - 2 Task - 1 Task - 2 Task - 1 Task - 2 Task - 1 Task - 2 复制代码

使用信号量控制并发

代码

#import "ViewController.h"@interface ViewController ()@property (nonatomic, strong) dispatch_semaphore_t semaphore;@end@implementation ViewController- (void)viewDidLoad {    [super viewDidLoad];        self.semaphore = dispatch_semaphore_create(1);    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{        dispatch_semaphore_wait(self.semaphore, DISPATCH_TIME_FOREVER);        for (NSUInteger i = 0;  i < 10; ++i) {            NSLog(@"Task - 1");        }        dispatch_semaphore_signal(self.semaphore);    });        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{        dispatch_semaphore_wait(self.semaphore, DISPATCH_TIME_FOREVER);        for (NSUInteger i = 0;  i < 10; ++i) {            NSLog(@"Task - 2");        }        dispatch_semaphore_signal(self.semaphore);    });}@end复制代码

输出

Task - 1 Task - 1 Task - 1 Task - 1 Task - 1 Task - 1 Task - 1 Task - 1 Task - 1 Task - 1 Task - 2 Task - 2 Task - 2 Task - 2 Task - 2 Task - 2 Task - 2 Task - 2 Task - 2 Task - 2 复制代码

转载于:https://juejin.im/post/5a73b37d6fb9a063592ba27e

你可能感兴趣的文章
mysql5.7 创建一个超级管理员
查看>>
【框架整合】Maven-SpringMVC3.X+Spring3.X+MyBatis3-日志、JSON解析、表关联查询等均已配置好...
查看>>
要想成为高级Java程序员需要具备哪些知识呢?
查看>>
带着问题去学习--Nginx配置解析(一)
查看>>
onix-文件系统
查看>>
java.io.Serializable浅析
查看>>
我的友情链接
查看>>
多线程之线程池任务管理通用模板
查看>>
CSS3让长单词与URL地址自动换行——word-wrap属性
查看>>
CodeForces 580B Kefa and Company
查看>>
开发规范浅谈
查看>>
Spark Streaming揭秘 Day29 深入理解Spark2.x中的Structured Streaming
查看>>
鼠标增强软件StrokeIt使用方法
查看>>
本地连接linux虚拟机的方法
查看>>
某公司面试java试题之【二】,看看吧,说不定就是你将要做的题
查看>>
BABOK - 企业分析(Enterprise Analysis)概要
查看>>
Linux 配置vnc,开启linux远程桌面
查看>>
NLog文章系列——如何优化日志性能
查看>>
Hadoop安装测试简单记录
查看>>
CentOS6.4关闭触控板
查看>>