信号量Semaphore
来源:互联网 发布:fpga与单片机的区别 编辑:程序博客网 时间:2024/05/16 13:53
Semaphore 是一个计数信号量。从概念上讲,信号量管理着一组虚拟的许可,许可的初始数量可通过构造函数来指定。在执行操作前要首先获得许可,并在使用之后释放许可。如果获取不到许可,那么 acquire()将阻塞直到有许可获得为止。每个 release() 将返回一个许可给信号量。。说白了,Semaphore是一个计数器,在计数器不为0的时候对线程就放行,一旦达到0,那么所有请求资源的新线程都会被阻塞。每一次请求一个许可都会导致计数器减少1,同样每次释放一个许可都会导致计数器增加1,一旦达到了0,新的许可请求线程将被挂起。缓存池也是使用此思想来实现的,比如链接池、对象池等。
下面是一个例子:
package net.jcip.examples;import java.util.*;import java.util.concurrent.*;public class BoundedHashSet <T> { private final Set<T> set; private final Semaphore sem; public BoundedHashSet(int bound) { this.set = Collections.synchronizedSet(new HashSet<T>()); sem = new Semaphore(bound); } public boolean add(T o) throws InterruptedException { sem.acquire(); boolean wasAdded = false; try { wasAdded = set.add(o); return wasAdded; } finally { if (!wasAdded) sem.release(); } } public boolean remove(Object o) { boolean wasRemoved = set.remove(o); if (wasRemoved) sem.release(); return wasRemoved; }}使用信号量将任何一种容器变为有界阻塞容器,在调用add方法向底层容器添加一个元素前,要先获得一个许可,如果获取不到,则阻塞,删除掉一个元素时,则释放一个许可返回给信号量。
0 0
- 信号量semaphore
- 信号量Semaphore
- 信号量semaphore
- 信号量Semaphore
- 信号量Semaphore
- 信号量Semaphore
- 信号量semaphore
- semaphore信号量
- 信号量Semaphore
- 信号量 semaphore
- 信号量 semaphore
- 信号量Semaphore
- Semaphore信号量
- 信号量semaphore
- 信号量Semaphore
- Semaphore (信号量)
- Semaphore(信号量)
- 信号量(Semaphore)
- opencv 与ROS路径冲突
- Android apk动态加载机制的研究(二):资源加载和activity生命周期管理
- 有一种树叫做线段树,有一种数组叫做树状数组
- 【Android开发日记】jsonObject = new JSONObject(info)报错 A JSONObject text must begin with '{' at character
- ARM指令中的STMFD和LDMFD简介
- 信号量Semaphore
- Hdu 1730 Nim博弈
- 微信公众帐号开发教程第1篇-引言
- cenos 6.4下安装phpmotion
- chromeplus
- C语言-----Scanf原理
- iOS界面-仿网易新闻左侧抽屉式交互
- machine learning package
- UVa494 - Kindergarten Counting Game,java写的