Date: 2001-07-02 13:04:06
--- In boost_at_y..., "Peter Dimov" <pdimov_at_m...> wrote:
> From: <williamkempf_at_h...>
> > --- In boost_at_y..., "Peter Dimov" <pdimov_at_m...> wrote:
> > > If you expand the examples that had a thread_manager or a
> > thread_group in
> > > them, giving the full implementation, you'll see that they, too,
> > demonstrate
> > > the same point.
> > No, they don't, actually. Any difficulties in use (minimal) are
> > eliminated by the other concepts.
> Let's get back to your original example:
> void foo()
> thread_group threads;
> for (int i=0; i<10; ++i)
> Here's an implementation of thread_group:
> class thread_group
> // all implicit members are fine and useful
> template<class F> void create(F f)
> void join_all()
> thread::join(v_.begin(), v_.end());
> std::vector<thread::ref> v_;
> As you can see, it's very similar to my vector example.
There are two problems here. First, as I pointed out the details are
hidden in the other concept, so the ease of use is not impacted.
Second, you chose to use a ref-count design internally, when such a
design is not needed.
// all implicit members are fine and useful
template<class F> void create(F f)
std::vector<thread*>::iterator it = v_.begin();
while (it != v_.end())
it = v_.erase(it);
You should note that like you I didn't include proper
synchronization, so this implementation isn't valid, but it
illustrates the point. My implementation required no reference
management, only explicit lifetime management.
> > > So, your unspoken question is probably "why provide a
> > when we
> > > already have shared_ptr?"
> > No, that's not really the issue. Ref-counting is the exception,
> > the rule, to the need for lifetime management. Explicit
> > the norm, which is also much more efficient.
> Is it really your opinion that explicit management is the norm in
No, but for some object types and usages, yes, then it is the norm.
The usage patterns for a thread concept dictate that the norm is
going to be explicit management. That is my claim.
For C++ in general, I'd say that neither is the norm. That's why we
have both auto_ptr and shared_ptr in our tool box.
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk