博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
线程中的Semaphore理解
阅读量:6350 次
发布时间:2019-06-22

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

(信号量)就像一个夜总会一样:它有一个特定的capacity(容量),被一个保镖强制限制。一旦它满了,没有人能再进去,然后就在外面形成了一个等待的Queue(队列)。接着,一个人离开,Queue的首部的那个人进入。这种constructor构造器)需要至少两个参数:夜总会中目前可用的位置和夜总会的capacity

一个带着capacitysemaphore类似于一个Mutex(互斥量)或者lock(锁),只是semaphore没有“拥有者”,换言之,它是thread(线程)不可知的。任何一个thread可以基于semaphore调用释放,而基于Mutexlock,只有包含了lockthread才可以释放它。

有两个功能相似的类:SemaphoreSemaphoreSlim。后者在Framework4.0中有介绍并且被优化,达到并行程序中的low-latency(低延时)要求。它在传统的多线程中也很有用,因为它可以让你在等待的时候指定一个取消记号。然而,它不能用于进程间的信号发送。

Semaphore在调用WaitOne或者Release时需要1微妙;SemaphoreSlim只需要四分之一微秒。

Semaphore在限制并发性中很有用——防止太多的thread一起执行一个特定的代码段。在下面的例子当中,5thread试图进入夜总会但是植被允许一次进入三个:

 

如果那个Sleep语句被代替执行集中的硬盘I/O(读写),Semaphore将通过限制过多并行的硬盘驱动处理活动改善执行效率。

一个Semaphore,一旦命名,则可以和一个Mutex一样跨越进程。

本文转自HDDevTeam 51CTO博客,原文链接:http://blog.51cto.com/hddev/623218,如需转载请自行联系原作者

你可能感兴趣的文章
vue.js 打包遇到的问题
查看>>
【译】更优秀的GraphQL官方中文文档-客户端如何使用
查看>>
git pull遇到的问题
查看>>
eclipse下maven spring项目环境配置
查看>>
无缝轮播
查看>>
CTS失败项分析(2)android.telephony.cts.VisualVoicemailServiceTest#testFilter_data
查看>>
三分钟,轻松了解Dapp
查看>>
GMQ交易平台满足不同客户群体的多种投资需求
查看>>
大数据开发如何入门你必须知道这些
查看>>
关于js(es5)如何优雅地创建对象
查看>>
阿里云前端周刊 - 第 28 期
查看>>
iOS 主队列同步造成死锁的原因
查看>>
es6 下比较对象是否有修改的简要方法
查看>>
windows安装mysql
查看>>
你还在看《深入理解Java虚拟机》的运行时数据模型吗?
查看>>
RIS,创建 React 应用的新选择
查看>>
线性结构上的动态规划--算法竞赛入门经典笔记
查看>>
面试官:你使用webpack时手写过loader,分离过模块吗?
查看>>
Ubuntu 16.04系统下 对OpenJDK编译好的Hotspot 进行调试
查看>>
00-利用思维导图梳理JavaSE基础知识-持续更新中!
查看>>