Java 使用信号量忙等待
我正在使用信号量执行一些同步线程。现在我要做的就是等待一些客户线程使用floor_clerk线程中的信号量进入队列。我以前是用while循环来做的。客户线程也必须等待,直到楼层办事员也使用信号灯协助。我以前是用深度睡眠来做的。 任何等待都必须使用P(信号量)(获取)这就是等待的方式。 这就是任务: 楼层服务员等待(使用信号灯)顾客到达;然后,他们会帮助他们获得他们需要的任何信息。然而,楼层办事员一次只能帮助一位客户;因此,客户必须等待(使用信号灯)有空的职员帮助他/她。 我以前的楼层服务员等待代码是:Java 使用信号量忙等待,java,multithreading,synchronization,semaphore,Java,Multithreading,Synchronization,Semaphore,我正在使用信号量执行一些同步线程。现在我要做的就是等待一些客户线程使用floor_clerk线程中的信号量进入队列。我以前是用while循环来做的。客户线程也必须等待,直到楼层办事员也使用信号灯协助。我以前是用深度睡眠来做的。 任何等待都必须使用P(信号量)(获取)这就是等待的方式。 这就是任务: 楼层服务员等待(使用信号灯)顾客到达;然后,他们会帮助他们获得他们需要的任何信息。然而,楼层办事员一次只能帮助一位客户;因此,客户必须等待(使用信号灯)有空的职员帮助他/她。 我以前的楼层服务员等待代
while (done != Main.csize) {
//wait while their is no customer in queue
while (queue.isEmpty() && done != Main.csize) {
}
//while their is a customer in queue assist customers
while (queue.size() != 0 && done != Main.csize) {
//some stuff to do
}
}
请帮助我在这里实现信号量。只需将您的客户端存储在阻塞队列中,并使用
take()
方法进行阻塞,直到有可用的客户端提供服务。没有必要将队列和阻塞机制分开,因为它已经内置到库中
如果您必须使用信号量,信号量的工作原理基本上是有一个阻塞队列“许可证”。您应该考虑如何将此阻塞功能应用到您尝试执行的操作中。当有可用的客户端时,您希望释放()
许可证,并允许服务获取()
。如果没有任何许可证,则服务将阻止acquire()
请帮帮我吧??
// Add client
queue.add(client);
semaphore.release();
// Clerk loop
while (true) { // Whatever condition
semaphore.acquire();
Client client = queue.remove();
// ...
}