|
Boost : |
From: Alexander Terekhov (terekhov_at_[hidden])
Date: 2001-08-21 08:26:59
> From: williamkempf_at_h...
[...]
> > Please verify something for me. Alexander quoted Dave
> > Butenhof as saying:
> >
> > > But there were two problems. [1] There was no way to alter the
> > > initial thread of a process so that its resources would be
> > > automatically reclaimed on termination. [2] And there was this
> > > nasty problem in join; where, if the join is cancelled,
> > > which implies it didn't complete, the target thread of the
> > > join would languish forever -- another memory leak about
> > > which the program could do nothing.
> >
> > Is it correct that your design does not have either of these
> > problems because C++ semantics take care of [1], and [2]
> > can't happen because there is no join cancellation?
>
> I don't understand [1]...
e.g. (your CV example from condition.html):
>> int main(int, char*[])
>> {
>> boost::thread::create(&sender, 0);
>> boost::thread::create(&receiver, 0);
>> boost::thread::join_all();
^^^^^^^^^^^^^^^^^^^^^^^^^^
>> return 0;
>> }
the other way (probably better way, IMHO) could be
(if you would support pthread_detach/exit):
int main(int, char*[])
{
boost::thread::create(&sender, 0);
boost::thread::create(&receiver, 0);
// boost::thread::join_all();
boost::thread::<...current_thread...>detach();
boost::thread::<...current_thread...>exit();
// should never reach this point
return 0;
}
news:Y76g7.322$bB1.27349_at_[hidden]
David Butenhof wrote:
"POSIX allows you to terminate the initial ("Main") thread
by calling pthread_exit(), or by cancelling it. In either
case, the process will continue running, but no implementation
resources owned by the initial thread will be reclaimed,
unless the initial thread has been detached or some other
thread later joins with it. (Under normal circumstances, no
thread will have the pthread_t of the initial thread; but it
does have one, and it can get it, and save it somewhere so
another thread can find it.) Usually that's not a big deal,
since there's only one initial thread. Still, there ARE
resources, and they MAY be stranded, and if that's an
issue, you need to consider the consequences."
POSIX:
"void pthread_exit(void * value_ptr);
...
The process shall exit with an exit status of 0 after
the last thread has been terminated. The behavior shall
be as if the implementation called exit() with a zero
argument at thread termination time."
regards,
alexander.
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk