翻译: Swift 中信号量的美妙之处
在这个故事中,我们将做以下事情:
- 了解什么是信号量
- 了解信号量的工作原理
- 实施和解释2个例子
1. 开始吧
信号量使我们能够控制多个线程对共享资源的访问。为了简单开始,让我们考虑以下现实生活场景:
一位父亲和他的三个孩子坐在家里,然后他拿出一个 iPad……
孩子2:我想玩iPad!!!
Kid 1 : NO!, 我想先玩……
Kid 3 : Ipad!平板电脑!平板电脑!掌声
父亲:好的,孩子 2,既然你先问了,而且目前没有人在使用 iPad,那就拿走它,但一旦你完成了就告诉我。剩下的孩子们,请耐心等待。
孩子 2:(5 分钟后)我完成了父亲。
父亲:孩子 1,iPad 可以用了,做完就告诉我。
孩子 1:(5 分钟后)我完成了父亲。
父亲:孩子 3,iPad 可用,你做完后告诉我。
孩子 3:(5 分钟后)我完成了父亲。
在上面的场景中,父亲是信号量,iPad 是 共享资源,孩子是线程。请注意父亲如何确保一次只有一个孩子使用 iPad。如果我们将其与编程进行比较,则一次只有一个线程可以访问共享资源。另外注意使用顺序,先问先得(FIFO)。
提示:共享资源可以代表一个变量,也可以代表一个作业,例如从 URL 下载图像、从数据库读取等。
如果父亲只是将 iPad 送给孩子会怎样?一场战斗可能会升级到可能坏掉的 iPad
翻译: Swift 中信号量的美妙之处相关推荐
- 探索 Swift 中的 MVC-N 模式
作者:Marcus Zarra(twitter:@mzarra) Marcus 将会为大家介绍一种设计模式,他曾经在那些需要从互联网进行大量频繁数据请求的 iOS 应用当中使用此设计模式.这个设计采用 ...
- [译] 探究 Swift 中的 Futures Promises
本文讲的是[译] 探究 Swift 中的 Futures & Promises, 原文地址:Under the hood of Futures & Promises in Swift ...
- Swift中Class和Struct异同
Swift 中类和结构体有很多共同点.共同处在于: 定义属性用于存储值 定义方法用于提供功能 定义下标操作使得可以通过下标语法来访问实例所包含的值 定义构造器用于生成初始化值 通过扩展以增加默认实现的 ...
- 如何在 Swift 中进行错误处理
作者:Olivier Halligon,原文链接,原文日期:2015-12-17 译者:JackAlan:校对:靛青K:定稿:Channe 今天的文章讲解如何在 Swift 中进行错误处理. 说实话, ...
- 怎样在swift中创建CocoaPods
本文由yake_099(博客)翻译自raywenderlich,作者:Joshua Greene 原文:How to Create CocoaPods with Swift 你可能对一些比较著名的开源 ...
- Swift中编写单例的正确方式
本文由CocoaChina译者leon(社区ID)翻译自krakendev 原文:THE RIGHT WAY TO WRITE A SINGLETON 转载请保持所有内容和链接的完整性. 在之前的帖子 ...
- swift设置启动图不现实_如何通过装饰房屋来开始在Swift中使用增强现实
swift设置启动图不现实 by Ranadhir Dey 由Ranadhir Dey 如何通过装饰房屋来开始在Swift中使用增强现实 (How to get started with augmen ...
- swift视图容器_如何使用IBDesignable在Swift中创建漂亮的,可重复使用的渐变视图...
swift视图容器 by Lee Dowthwaite 通过李道思韦特 如何使用IBDesignable在Swift中创建漂亮的,可重复使用的渐变视图 (How to create a beautif ...
- 在 Swift 中使用闭包实现懒加载
本文讲的是在 Swift 中使用闭包实现懒加载, 原文地址:Swift Lazy Initialization with Closures 原文作者:Bob Lee 译文出自:掘金翻译计划 译者:ls ...
- Swift中关于可选类型(?)与强制解析(!)的特性
2019独角兽企业重金招聘Python工程师标准>>> Swift中问号表示这是一个可选类型,白话翻译:某个常量或者变量可能是一个类型,也可能什么都没有,我不确定它是否真的会有值,也 ...
最新文章
- C语言字符型数组ppt,C语言第13讲指针与字符串(字符数组).ppt
- 4、SpringBoot 配置和使用定时任务
- ASP.NET定时调用WebService 运行后台代码
- 笑说设计模式-小白逃课被点名
- python教程答案十九章_Python 编程从入门到实践 第19章 注销一节问题
- sdut 数字三角形问题
- android启动activity的详细过程
- 无法找到脚本文件 C:/Windows/explorer.exe:574323188.vbs
- Oracle的SQLPLUS命令
- LNMP详解(十六)——Nginx日志切割
- 父子组件如何实现通信
- 快速批量改变图片格式
- 《程序员修炼之道 - 从小工到专家》吐血解读
- JAVA class汉化工具hhclass v1.0免费版
- Axure RP从入门到精通(一)原型设计工具简介
- 张云茹计算机,重庆理工大学药学与生物工程学院研究生导师简介-张云茹
- iTunes只能装C盘吗_为什么电脑软件喜欢默认安装在C盘呢?
- 运维工程师必知:什么是千兆交换机?
- 惹某人突然不舍de第七周(习题+感悟)
- feign 传 MultipartFile Error converting request body 序列化 错误