我创建了信号量
Semaphore semaphore = new Semaphore(1);
我们已经超载了 aquire 等方法:
aquire()
aquire(int)
Q1:对于只有1个许可证的当前信号量,第二种方法(aquire(int)
)是否有任何意义?
Q2:我仍然对
感到困惑new Semaphore(int)
new Semaphore(int,true)
new Semaphore(int, false)
问题3:如果我致电release()
,而不致电aquire()
,许可证数量会发生什么变化,是否会增加我们宣布的数量?
注意:有多个线程共享Semaphore
对象。
感谢任何帮助。
答案 0 :(得分:1)
如果Semaphore
以单个许可开始,并且单个线程尝试获取超过1个许可,则该线程将阻止。假设没有其他线程会调用必要数量的release
,那么该线程将被无限期阻塞。
overloaded constructor的boolean
参数表示
如果此信号量将保证先进先出授权 争用的许可证,否则为假
您在构造函数中指定的许可数量只是初始数量,而不是限制。
答案 1 :(得分:1)
Q2:我仍然对
感到困惑
new Semaphore(int) //same as new Semaphore(i, false);
new Semaphore(int,true) //the Semaphore will be "fair".
new Semaphore(int, false) //the semaphore will not be "fair".
布尔标志控制信号量是否为 fair 。 "一般"意味着当多个线程被阻塞等待获取许可时,等待的线程将以严格的先来先服务顺序运行。要阻止的第一个线程将是第一个要运行的线程,依此类推。
当信号量不公平时,它可以通过一种算法来实现,与某些计算机体系结构上的公平算法相比,该算法可能提供更高的性能。