Are exception with gcc 2.95.2 thread-safe?
Dima Volodin
dvv@dvv.ru
Wed Mar 22 11:04:00 GMT 2000
On Tue, 21 Mar 2000 12:46:52 +0100, you wrote:
>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
More information about the Gcc
mailing list