|
Boost : |
Subject: Re: [boost] [lockfree] Faulty (?) static assert
From: Hartmut Kaiser (hartmut.kaiser_at_[hidden])
Date: 2012-09-02 09:49:42
Hey Tim,
> > The lockfree::queue constructors raise a static assert if no capacity
> > is specified. This contradicts the member initialization code close to
> > the assert, for instance:
> >
> > queue(void):
> > head_(tagged_node_handle(0, 0)),
> > tail_(tagged_node_handle(0, 0)),
> > pool(node_allocator(), has_capacity ? capacity : 0)
> > {
> > BOOST_STATIC_ASSERT(has_capacity);
> > initialize();
> > }
> >
> > which implies that 'has_capacity' is allowed to be false. From what I
> > can see 'has_capacity' could be false, indeed, in particular if the
> > queue is not bounded in size.
>
> the idea is that the default constructor is only allowed, when the
> capacity is set at compile-time. otherwise the data structure won't be
> completely lockfree, as creating new nodes will hit the memory allocator.
> so the assertion is correct, but the initialization of the pool can be
> changed.
Hmmm, I do not understand. If the queue is constructed with
fixed_size<false> (which is the default), this assertion will _always_ fire
as you're not required to specify a capacity in this case.
Regards Hartmut
---------------
http://boost-spirit.com
http://stellar.cct.lsu.edu
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk