This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: Are exception with gcc 2.95.2 thread-safe?


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

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]