[vos-d] s5 concurrency (design part 2)
Karsten Otto
otto at inf.fu-berlin.de
Tue Apr 10 04:52:33 EDT 2007
Ok, I haven't studied this Actor model so far, let me see if I
understood it correctly.
If a message comes in from the network, you determine its target
vobject and method(?). You then try to bind/lock the target, and
execute its method in a thread you pick from a pool. If the vobject
is already bound, you just queue the message for later execution.
Once the vobject gets unbound/unlocked, you pick another thread from
the pool and pass the queued message to the target method. (Actually,
it does not matter whether the message came from the network or some
other actor, which is neat).
While a vobject method is executing, it can send messages to other
vobjects, which either bind and execute the target *in the same
thread* or queue a message, as before. In the latter case, you get a
future you can query for completion or wait on.
Assuming I got it right so far, I wonder what happens if you decide
to wait on your future. When you do this, you block the current
thread, which nevertheless still holds the locks of / is still bound
to one or more vobjects. In other words, the deadlock just waits
around the corner - e.g. two vobjects with separate threads and
futures for each other. Or does waiting automatically release the
blocks/bindings? In that case, what happens once the thread unblocks?
And can another thread bind/lock the vobject in the meantime?
Slightly puzzled,
KAO
More information about the vos-d
mailing list