스칼라에서 블로킹 및 동기화 된 큐를 구현해야합니다. 이 수,스칼라 블로킹 큐, 적절한 대기
이def pop() : T = {
this.synchronized
{
_read()
if(_out.isEmpty) throw new Empty()
val ret = _out.head
_out = _out.tail
_length -= 1
return ret
}
}
def waitPop() : T =
{
var ret : Option[T] = None
// Possibly wait forever
while(ret.isEmpty)
{
try { ret = Some(pop) }
catch { case e : Empty => Thread.sleep(1000) }
}
ret.get
}
문제는 여기 Thread.sleep
입니다 : 내가 뭔가를 놓치지 않는 경우
, 동기화는 매우 간단하지만, 난 단지 (작동하는) 것을 생각할 수 차단 내 큐가 될 수 있도록 성능을 손상시키지 않습니까? 물론 더 낮은 값을 지정하면 CPU를 더 많이 소비하게됩니다. 제대로 대기 할 수있는 방법이 있습니까?
감사합니다. 푸시, 내가 (A synchronized
블록에 계속) notifyAll
추가
def waitPop() : T =
{
this.synchronized
{
while(isEmpty) wait
pop
}
}
동안 : Voo에
나는 https://stackoverflow.com/questions/1107593/what-are-trade-offs-for-busy-wait-vs-sleep 에서 살펴 봤지만, 제 경우에는 스케줄러가 알지 못합니다. 내가 기다리는 것은 그것을합니까? –
'Object.wait'와'Object.notify'를 사용하고 싶습니다. – Voo
고마워요, 그게 내가 찾고 있던 것입니다 (나는 그 모든 미래와 모든 것을 가지고 어려움을 겪었습니다). 감사합니다. –