Поясните нюанс использование агентов в akka

No Name
import scala.concurrent.ExecutionContext.Implicits.global
import akka.agent.Agent
import scala.concurrent.duration._
import scala.concurrent.stm._

def transfer(from: Agent[Int], to: Agent[Int], amount: Int): Boolean = {
  atomic { txn =>
    if (from.get < amount) false
    else {
      from send (_ - amount)
      to send (_ + amount)
      true
    }
  }
}

val from = Agent(100)
val to = Agent(20)
val ok = transfer(from, to, 50)

val fromValue = from.future
val toValue = to.future

Внимание вопрос: возможно ли не блокируя ограничить выполнение метода (допустим amount > 0 всегда) transfer до 0 в агенте from?
P.s. если провести transfer операцию много раза в ряд, вы получите отрицательное число в from и to во втором по итогу.
Пример взят отсюда: http://doc.akka.io/docs/akka/2.4.8/scala/agents.html#Deprecated_Transactional_Agents

No Name около 1 года назадСпасибо 0
2 чел.