This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: Are exception with gcc 2.95.2 thread-safe?
- To: Loren James Rittle <rittle at latour dot rsch dot comm dot mot dot com>, Dima Volodin <dvv at dvv dot ru>
- Subject: Re: Are exception with gcc 2.95.2 thread-safe?
- From: "aurelien.cornet" <aurelien dot cornet at tms dot thomson-csf dot com>
- Date: Wed, 29 Mar 2000 11:18:51 +0200
- CC: gcc at gcc dot gnu dot org
- Organization: Thomson Marconi Sonar
- References: <200003212256.QAA81207@latour.rsch.comm.mot.com>
With my administrator, we try:
On Sun and Linux "configure --enable-threads" => The program is
operating
On Aix 4.3.2 "configure --enable-threads" => The program was not
operating. But using "configure --enable-threads=posix" the program is
now operating.
I can answer my question: YES.
Thank you very much for your help.
Aurelien.
----------------------------------------------------------------------
Message written by Loren James Rittle
>
> > I try the attached progam on Linux, Sun, Aix:
> > In a main procedure, a try block creates a thread, sleep 2s (let the
> > thread to be run), then throw an exception. We expected that this
> > exception will be catched in main and the program terminates. But this
> > program will never terminate and the result is:
> > Thread has started
> > Exception catched in thread
>
> > Is it a bug? Can we use exception in a multi-threading program?
>
> Your program is operating as it should in the three environments I
> have easy access to: Solaris, Linux and FreeBSD. I suspect that there
> is a reason why it isn't working for you.
>
> Unfortunately, when you configure gcc, you have to explicitly inform
> the process that you want thread safety! E.g.:
>
> ../egcs/configure --enable-threads
>
> Then, you have to provide a non-portable-between-gcc-based-
> development-environments switch during both compilation and linking:
>
> On Linux and FreeBSD:
>
> g++ -pthread main.C
>
> On Solaris:
>
> g++ -pthreads main.C
>
> On OSF:
>
> EITHER g++ -pthread main.C OR g++ -threads main.C
> (but note that depending on which switch you give, your program will
> link against a different set of libraries)
>
> Don't ask me why you need to use different options... ;-)
>
> Regards,
> Loren
----------------------------------------------------------------------
Message writen by Dima Volodin
> >The usual answer to this question is:
> >
> >The ANSI/ISO C++ Professional Programmer's Handbook (Danny Kalev)
> >"In a multi-threading environment, exception handling should be
> >thread-safe, but a single threading environment
> >can implement exception handling in an non-thread-safe manner; this is
> >implementation-dependent issue."
> >
> >I try the attached progam on Linux, Sun, Aix:
> >In a main procedure, a try block creates a thread, sleep 2s (let the
> >thread to be run), then throw an exception. We expected that this
> >exception will be catched in main and the program terminates. But this
> >program will never terminate and the result is:
> >Thread has started
> >Exception catched in thread
> >
> >Is it a bug? Can we use exception in a multi-threading program?
>
> What compiler version and what compiler flags did you use? I tried your
> program with g++ 2.95.2 in Solaris on both i386 and sparc and the output
> in both cases was
>
> Thread has started
> exception catched in main
>
> In both cases, the compiler was configured with --enable-threads=posix
> and the program compiled as
>
> g++ -D_REENTRANT main.C -lpthread
>
> The canonical 2.95.2 Solaris sparc configuration uses these flags
> automatically if you specify -pthreads in the command line.
>
> BTW, I use exceptions in multi-threaded environment pretty heavily. My
> only gripe is that exceptions don't propagate across Solaris libraries
> calls (I wonder if it's possible to recompile all of them with gcc when
> the sources become available). Other than that everything works the way
> it's expected to work.
>
> >Aurelien.
>
> Cheers!
>
> Dima