You can do:

        Tcl Thread A -> package require java -> start JVM ...
        Tcl Thread B -> send request to Tcl thread A for Java work using
message passing on the event queue of A
        Tcl Thread C -> send request to Tcl thread A for Java work ...
       ...

To share a single JVM using a critical section is not a good idea.  This
critical section contains too much code.  Critical section in general should
be used on a piece of very short execution code.

Many synchronization deadlocks arise because people make critical sections
too long and the code within the critical section too complex.  For example,
Tcl thread A locks the JVM, then calls into the JVM to do some work using
Java thread A.  Java thread B calls back into Tcl thread B for some data.
Tcl thread B blocks in trying to interact with Java thread B.  At this
point, Java thread A may also block waiting for Java thread B to finish in
the JVM.  The code deadlocks.

When sharing a long running piece of code, other forms of synchronization
work better such as locks and message passing.  Tcl provides message passing
as the way to communicate between Tcl interpreter threads.

-- Jiang Wu
   [EMAIL PROTECTED]

> -----Original Message-----
> From: Mike Schwartz [mailto:[EMAIL PROTECTED]]
> Sent: Monday, July 17, 2000 9:22 PM
> To: Mo DeJong; [EMAIL PROTECTED]
> Subject: [Tcl Java] tclBlend / tcl thread workaround
> 
> 
> so, I just had another idea:
> 
> I don't really need (or even want) more than 1 JVM for all 
> the tcl threads.
> On the Java side I have threads that allow concurrency among incoming
> requests, so the structure I really want is:
> 
>       - master tcl thread does 'package require java', which 
> creates an instance
>              of the JVM
>       - all other threads that want to make JVM requests 
> share that one instance,
>              using appropriate synchronization around any 
> critical section code
> 
> Right now, the code that implements the 'package require 
> java' command creates
> a new JVM per thread.  What about implementing another 
> tcljava command that
> lets me create one JVM and then share it among the tcl 
> threads? That would
> workaround the current multithread/tclblend bug, and it would be more
> efficient (since otherwise I'm starting up the JVM every time 
> a request
> comes in on the tcl side).
> 
> Thoughts?  Seems like this would be pretty easy to implement.
>   - Mike
> 
> ----------------------------------------------------------------
> The TclJava mailing list is sponsored by Scriptics Corporation.
> To subscribe:    send mail to [EMAIL PROTECTED]  
>                  with the word SUBSCRIBE as the subject.
> To unsubscribe:  send mail to [EMAIL PROTECTED] 
>                  with the word UNSUBSCRIBE as the subject.
> To send to the list, send email to '[EMAIL PROTECTED]'. 
> An archive is available at 
> http://www.mail-archive.com/tcljava@scriptics.com
> 

----------------------------------------------------------------
The TclJava mailing list is sponsored by Scriptics Corporation.
To subscribe:    send mail to [EMAIL PROTECTED]  
                 with the word SUBSCRIBE as the subject.
To unsubscribe:  send mail to [EMAIL PROTECTED] 
                 with the word UNSUBSCRIBE as the subject.
To send to the list, send email to '[EMAIL PROTECTED]'. 
An archive is available at http://www.mail-archive.com/tcljava@scriptics.com

Reply via email to