Vangogh500
Vangogh500

Reputation: 959

Actor accessing things out of scope

I'm using the Akka libraries.

What happens when multiple actors call a function on an object? Would this block other actors from accessing the object?

The reason I ask this is because I want to use JBCrypt with akka actors. And since we can encrypt multiple strings concurrently I have each actor calling JBcrypt.hash(...). Not sure how it works since I think, in scala, objects exist in one place, and I feel like multiple actors using the same object (library) might block the concurrency from actually happening.

Upvotes: 1

Views: 58

Answers (2)

nattyddubbs
nattyddubbs

Reputation: 2095

Multiple actors calling a function in an object that calls a library will not block unless the library being called uses concurrency control mechanisms such as sychronized, ThreadLocal or an object lock.

For example, calling print on the below Printer object will block:

class BlockingPrinter(){
  def print(s: String) = synchronized{s}
}

object Printer{
  val printer = new BlockingPrinter()

  def print(str: String) = printer.print(str)
}

But calling it on the below Printer object will not

class NonBlockingPrinter(){
  def print(s: String) = s
}

object Printer{
  val printer = new NonBlockingPrinter()

  def print(str: String) = printer.print(str)
}

In summary, the library that you're calling is the one that decides how concurrency is handled. Not the fact that you're calling an object.

Upvotes: 2

Nagarjuna Pamu
Nagarjuna Pamu

Reputation: 14825

It depends on how the function is implemented. If the function accessed some internal mutable state and tries to synchronize in order to achieve thread safety then there is a problem. If it's a pure function and does not access any external state, then it is safe. If the function has the mutable state at least it must contain the mutable state to itself.

Upvotes: 0

Related Questions