Threads?
Per Bothner
per@bothner.com
Thu Feb 27 21:48:00 GMT 2003
Chris Dean wrote:
> - Most application code written in Kawa will work fine in a
> multi-threaded setup.
To the best of my knowledge.
> - Most application code will have the same restrictions that Java code
> has. For example, you must synchronize around critical areas in the
> same way you would in Java.
Likewise.
> There are a few caveats:
>
> - fluid-let bindings are per thread.
Yes, but (currently, at least) inherited from parent thread.
> - If you are managing thread-specific state, you currently may need to
> use Futures.
Or fluid-bindings. I believe they work even without Futures. At
least when I took a quick look at the code it looked ok.
> - Changing bindings in a top level Environment is not thread safe.
> Is that right? If so, a couple questions: When do you have to use
> future?
At least (for now) if you want per-thread default input and output
ports. There may be other cases I can't think of.
What can happen if a change a binding in a top level
> Environment? Can it corrupt that one binding or can the entire
> Environment become corrupted?
Changing an binding (i.e. once you have a Symbol) is probably safe.
Though there may be some state transitions in the type of Constraint
the Symbol uses that may not be safe.
The bigger problem is looking up or creating a binding, e.g. in
Environment.lookup(String). This is not synchronized. These are
called in the class initializers of compiled code. These is a
synchronized statement in require, but my bigger concern is when a
class is initialized because of static reference. I'd have to look
at what is going on and what to do about it. One possibility is
to compile-in synchronization in the class initializers.
Another solution is to not use Symbols for undefined globals. E.g.
a compiler option to require that all identifiers by bound at
compile-time. This would be better for performance.
--
--Per Bothner
per@bothner.com http://www.bothner.com/per/
More information about the Kawa
mailing list