0
我正在学习编写多线程代码。我理解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;
}
}
同步放置和获取,该功能将永远持续下去,这是预期的。但是,当我删除同步的定义,输出将是
In put.
In put.
In get.
In get.
任何人都可以解释为什么结果看起来像这样?非常感谢。
这种令人费解的行为是为什么我们现在有更好的(更认知易处理和更少错误 - 易于使用)编写并发和分布式系统的工具。我在谈论阿卡。如果你正在编写并发系统,那么你可以使用它。 –