Boost logo

Boost :

Subject: Re: [boost] [threadpool] version 22 with default pool
From: k-oli_at_[hidden]
Date: 2009-03-08 13:13:27


Hello,

Am Sunday 08 March 2009 15:29:05 schrieb Edouard A.:
> Unfortunately, I am unable to compile the tp library. TT

Hmm - did you try version 23? I've no problems to compile default_pool(
gcc-4.3).

> By the way, why didn't you write it as:
>
> inline
> default_pool & get_default_pool()
> {
> static default_pool
> instance(poolsize(thread::hardware_concurrency()));
> return instance;
> }

static locals are not thread-safe

> This eliminates the need of a .cpp for default_pool.

code-bloading!

> Another remark is that I am not sure I understand the raison d'être of the
> poolsize type. What is the added value to say, "int" or std::size_t. This
> prevents us from writing

pool accepts multiple integer arguments (poolsize, high_watermark
low_watermark,...) - with specific types for each argument the meaning of
each arg becomes clear (see scott meyers advise).

> When scheduling several tasks with submit, I find it odd that I don't have
> a pool.wait()

pool::shutdown() or pool::shutdown_now() -> diff. explained in the docs

> that would allow me to wait until all tasks are finished
> (condition_variable-like pattern for example).

a task is finsihed if its result (shared_future) becomes ready ->
shared_future< R >task< R >::result()
void shared_future< R >::wait()

> Some tests done with parallel "filling" on a concurrent_vector show that
> tbb does better but threadpool is not humiliated:
this is clear because threadpool use a single-lock global qeue.
I'm working on a lock-free global queue - I hope theadpool becomes faster.

> This is how I implemented tp::fill:
>
> template <typename RandomIterator, typename Value>
> void parallel_fill(RandomIterator first, RandomIterator last, Value v)
> {
> typedef typename RandomIterator::difference_type difference_type;
>
> difference_type n = std::distance(first, last);
>
> boost::tp::default_pool p(boost::tp::poolsize(4));

the default pool should already be avaliable - I don't understand why you
initialize it with poolsize.

Oliver


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