Boost logo

Boost :

From: jbandela_at_[hidden]
Date: 2001-08-03 18:27:12


In GOTW 61 Herb Sutter writes the following

The Importance of "Big-A" Atomicity
As pointed out by Abrahams and Colvin and others, to guarantee any
kind of exception safety it is essential that certain operations --
notable destructors and deallocation functions -- be required not to
throw. That is, they must be at least A-safe. We rely on this in all
sorts of situations, notably:

- The "do all the work off to the side, and commit using only
nonthrowing operations" method is not possible if there are no
suitable nonthrowing (A-safe) operations.

- The related "create a temporary and Swap()" method, which is the
standard form of exception-safe copy assignment, is not possible
without a nonthrowing (A-safe) Swap().

An interesting point raised by Greg Colvin is that for this reason it
does not appear to be possible to write exception-safe code in Java.
The Java specification currently allows the JVM to throw an exception
at any time at arbitrary points in the program, for example
asynchronously when stop is called on a Thread object. In practice it
isn't that bad, but it is worrisome that the Java specification can
apparently be shown to preclude writing exception-safe code because
there is no way to absolutely guarantee A-safe operations in Java.

-----

Are the statements about arbitrary exceptions precluding the writing
of exception safe code still valid? It seems to me that using
exceptions to interrupt threads would, according to the above
passage, preclude writing guaranteed exception-safe code.

Regards,

John R. Bandela

--- In boost_at_y..., "David Abrahams" <david.abrahams_at_r...> wrote:
> I have not looked at the threading case in particular, but I do
want to
> weigh in on the side of "exceptions don't have to be errors".
Exceptions are
> appropriate where the execution model and (lack of) efficiency
matches the
> needs of the programmer. I've used exceptions successfully to allow
users to
> cancel long operations in a GUI app: I scattered occasional calls
to the
> function which polled for the cancel keystroke through my
operations, and
> threw an exception when it was found that the user had cancelled.
>
> -Dave
>
> ----- Original Message -----
> From: "Alexander Terekhov" <terekhov_at_d...>
> To: <boost_at_y...>
> Sent: Friday, August 03, 2001 2:07 PM
> Subject: Re: boost.threads [was RE: [boost] Re: sockets /network
programming
> Requirements]
>
>
> >
> > > A good attempt at bypassing the problem, but it doesn't cover
all the
> > > basis. This *ISN'T* really an exception but instead is an
attempt at
> > > program flow control.
> >
> > sorry, it is the same (ISO/IEC 14882:1998(E) pg 291):
> >
> > "Exception handling provides a way of transferring control
> > and information from a point in the execution of a program to
> > an exception handler associated with a point previously passed
> > by the execution."
> >
> > > The problem is that code can still catch these
> > > exceptions, even if you insure they are rethrown. Imagine, for
> > > example, a catch block coded as:
> > >
> > > try
> > > {
> > > }
> > > catch(...)
> > > {
> > > LogError();
> > > exit();
> > > }
> > >
> > > The programmer probably doesn't want LogError() called for this
non-
> > > error, and he definately doesn't want the program to exit.
> >
> > but then his code would never call thread::exit so there
> > will be no problems. also, IMHO catch(...) without "throw;"
> > or program termination is inherently flawed (e.g. who is
> > supposed to delete the object thrown by not so smart pointer,
> > etc) so i do not see any good reasons not to provide
> > exception based thread::exit even w/o catch(...)
> > workarounds.
> >
> > regards,
> > alexander.
> >
> >
> >
> > Info: http://www.boost.org Unsubscribe:
> <mailto:boost-unsubscribe_at_y...>
> >
> > Your use of Yahoo! Groups is subject to
http://docs.yahoo.com/info/terms/
> >
> >
> >


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk