在这个故事中,我们将做以下事情:

  • 了解什么是信号量
  • 了解信号量的工作原理
  • 实施和解释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 中信号量的美妙之处相关推荐

  1. 探索 Swift 中的 MVC-N 模式

    作者:Marcus Zarra(twitter:@mzarra) Marcus 将会为大家介绍一种设计模式,他曾经在那些需要从互联网进行大量频繁数据请求的 iOS 应用当中使用此设计模式.这个设计采用 ...

  2. [译] 探究 Swift 中的 Futures Promises

    本文讲的是[译] 探究 Swift 中的 Futures & Promises, 原文地址:Under the hood of Futures & Promises in Swift ...

  3. Swift中Class和Struct异同

    Swift 中类和结构体有很多共同点.共同处在于: 定义属性用于存储值 定义方法用于提供功能 定义下标操作使得可以通过下标语法来访问实例所包含的值 定义构造器用于生成初始化值 通过扩展以增加默认实现的 ...

  4. 如何在 Swift 中进行错误处理

    作者:Olivier Halligon,原文链接,原文日期:2015-12-17 译者:JackAlan:校对:靛青K:定稿:Channe 今天的文章讲解如何在 Swift 中进行错误处理. 说实话, ...

  5. 怎样在swift中创建CocoaPods

    本文由yake_099(博客)翻译自raywenderlich,作者:Joshua Greene 原文:How to Create CocoaPods with Swift 你可能对一些比较著名的开源 ...

  6. Swift中编写单例的正确方式

    本文由CocoaChina译者leon(社区ID)翻译自krakendev 原文:THE RIGHT WAY TO WRITE A SINGLETON 转载请保持所有内容和链接的完整性. 在之前的帖子 ...

  7. swift设置启动图不现实_如何通过装饰房屋来开始在Swift中使用增强现实

    swift设置启动图不现实 by Ranadhir Dey 由Ranadhir Dey 如何通过装饰房屋来开始在Swift中使用增强现实 (How to get started with augmen ...

  8. swift视图容器_如何使用IBDesignable在Swift中创建漂亮的,可重复使用的渐变视图...

    swift视图容器 by Lee Dowthwaite 通过李道思韦特 如何使用IBDesignable在Swift中创建漂亮的,可重复使用的渐变视图 (How to create a beautif ...

  9. 在 Swift 中使用闭包实现懒加载

    本文讲的是在 Swift 中使用闭包实现懒加载, 原文地址:Swift Lazy Initialization with Closures 原文作者:Bob Lee 译文出自:掘金翻译计划 译者:ls ...

  10. Swift中关于可选类型(?)与强制解析(!)的特性

    2019独角兽企业重金招聘Python工程师标准>>> Swift中问号表示这是一个可选类型,白话翻译:某个常量或者变量可能是一个类型,也可能什么都没有,我不确定它是否真的会有值,也 ...

最新文章

  1. C语言字符型数组ppt,C语言第13讲指针与字符串(字符数组).ppt
  2. 4、SpringBoot 配置和使用定时任务
  3. ASP.NET定时调用WebService 运行后台代码
  4. 笑说设计模式-小白逃课被点名
  5. python教程答案十九章_Python 编程从入门到实践 第19章 注销一节问题
  6. sdut 数字三角形问题
  7. android启动activity的详细过程
  8. 无法找到脚本文件 C:/Windows/explorer.exe:574323188.vbs
  9. Oracle的SQLPLUS命令
  10. LNMP详解(十六)——Nginx日志切割
  11. 父子组件如何实现通信
  12. 快速批量改变图片格式
  13. 《程序员修炼之道 - 从小工到专家》吐血解读
  14. JAVA class汉化工具hhclass v1.0免费版
  15. Axure RP从入门到精通(一)原型设计工具简介
  16. 张云茹计算机,重庆理工大学药学与生物工程学院研究生导师简介-张云茹
  17. iTunes只能装C盘吗_为什么电脑软件喜欢默认安装在C盘呢?
  18. 运维工程师必知:什么是千兆交换机?
  19. 惹某人突然不舍de第七周(习题+感悟)
  20. feign 传 MultipartFile Error converting request body 序列化 错误

热门文章

  1. csdn如何写出文章,拥有较高的推荐量以及点击率
  2. linux 打开cgm软件,cgm文件扩展名,cgm文件怎么打开?
  3. asp.net中引入外部js文件,容易产生中文乱码
  4. Node.js简介与架构
  5. 你对Redis持久化了解多少?一篇文章让你明白Redis持久化
  6. 版本管理工具git的使用总结
  7. shellshock漏洞回顾
  8. 精通Hyperledger之Hyperledger composer建模语言(15)
  9. golang高级部分
  10. linux mysql 相关操作、问题