【并发编程学习】Semaphore 信号量

43 阅读2分钟

@[TOC]

Semaphore

计数信号量,用于限制某些(物理或逻辑)资源的线程数。 我先来说一个场景,这样能更好去理解。 就拿小区停车场来说这个,某小区停车场最多只能停 100 辆车,每停进去一辆车,停车场的空位就减一,出来一辆车,停车场的空位就加一,当停车场停进去 100 辆车后,如果还有车辆想停进去要么在外面等待,要么去其他地方去停车,如果说这个停车场只有一个出入口的话还是很好去控制的,但是如果停车场有很多个出入口,就可以用到 Semaphore 信号量来实现出入车对停车场空位的控制。

Semaphore 的创建

两个参数构造函数,第一个参数是设置可以使用的许可数量(根据上面的场景,可以理解为设置停车场的空位),第二个参数是公平(true)或者非公平(false)参数,公平参数是让线程按照先入先出的顺序依次去操作共享资源,非公平参数则是让所有等待的线程去争这个操作共享资源的使用权。 在这里插入图片描述

单个参数构造函数,参数是设置可以使用的信号量,在这里要注意的是,使用单参的话,会默认创建非公平信号量。 在这里插入图片描述

Semaphore API

方法名称备注
acquire从信号量中获得一个许可,如果没有许可则阻塞,直到获取到许可
tryAcquire从信号量中获得一个许可,获取到则返回 true,获取不到则返回 false
release释放一个许可返回给信号量
availablePermits从信号量中获得可用的许可数量

这几个就是常用的几个信号量的方法。





End