Re: Own implementation of multithread
- From: GPS <georgeps@xxxxxxxxxxxx>
- Date: Thu, 28 Aug 2008 16:54:23 +0000 (UTC)
lkfstephen@xxxxxxxxx wrote:
Dear all,
I am working on a multithread application.
I have already built the TCL using --enable-threads.
In c++ code, I am trying to create many threads, each thread will
create its own interpreter.
Each interpreter will need to eval a script.
For example,
void * func( void * null ){
Tcl_Interp* tcl_interp = Tcl_CreateInterp();
Tcl_Init(tcl_interp);
char * script = "set a 1\n"
"set b 2\n"
"puts $a\n"
"puts $b\n";
Tcl_EvalObjEx(tcl_interp, script , TCL_EVAL_GLOBAL);
delete tcl_interp;
}
"delete tcl_interp" is almost certainly wrong. The correct way is:
Tcl_DeleteInterp(interp);
I also suggest not using a tcl prefix for most things. While it's
unlikely that tcl would ever define something with the name tcl_interp,
it's possible.
int main (){
...
for (int i = 0; i < 10000; ++i)
pthread_create(&tid,NULL,func,NULL);
...
}
I would like to ask is this approach is wrong?
Stephen Lai
You're creating 10000 threads. That's a lot of threads. Most systems
have a limit much less than that. You'll most likely run out RAM, due
to the stack space for each thread, and other data structures. You're
also neglecting to check for errors. I have a feeling your
pthread_create is returning an error before 10000.
There is a PTHREAD_THREADS_MAX that you might want to look into:
http://www.opengroup.org/onlinepubs/009695399/basedefs/limits.h.html
There is a problem though with that approach though, and that problem is
that GNU/Linux doesn't define PTHREAD_THREADS_MAX, because it's not
fully POSIX compliant/compatible.
George
.
- References:
- Own implementation of multithread
- From: lkfstephen
- Own implementation of multithread
- Prev by Date: Re: NRE committed: PLEASE TEST
- Next by Date: Re: TclX loop slow in the default case
- Previous by thread: Re: Own implementation of multithread
- Next by thread: Re: Own implementation of multithread
- Index(es):
Relevant Pages
|