我正在学习用多线程编写代码。我理解Scala中同步运算符的字面意思。但是,当我运行以下代码时,我不理解输出。
package examples
import scala.concurrent.ops._
object concurrent extends App {
class BoundedBuffer[A](N:Int) {
var in = 0;
var out = 0;
var n = 0;
def put(x:A) = synchronized {
while(n>=N)
wait()
in = (in + 1)/N;
n = n+1;
println("In put.")
if(n==1)
notifyAll()
}
def get = synchronized {
while(n==0)
wait()
out = (out + 1)%N;
n = n-1;
println("In get.")
if(n == N-1)
notifyAll()
}
}
val buf = new BoundedBuffer[Int](10)
spawn {
while(true)
buf.put(0);
}
spawn {
while(true)
buf.get;
}
}
在 put 和 get 中同步后,该函数将永远持续下去,这是意料之中的。但是,当我从定义中删除同步时,输出将是
In put.
In put.
In get.
In get.
谁能解释为什么结果看起来像这样?非常感谢。