From: bill_kempf (williamkempf_at_[hidden])
Date: 2002-01-30 12:20:59


--- In boost_at_y..., "davlet_panech" <davlet_panech_at_y...> wrote:
> Hi,
>
> It seems that the current implementation of some Boost.Threads
> classes violates it's concept requirements, for example, here's how
> condition::wait() looks like:
>
> template <typename L>
> void wait(L& lock)
> {
> if (!lock)
> throw lock_error();
>
> do_wait(lock.m_mutex);
> }
>
>
> Type L is supposed to implement ScopedLock concept, which, unless I
> am mistaken, doesn't mention anything named `m_mutex'. Am I missing
> something here?

Not exactly. The m_mutex parameter is a private parameter, and thus
not part of the concept requirements. It's an implementation detail
requirement. If an implementation for a given platform can be coded
with out this requirement there's nothing wrong with that.

However, I can see problems with someone trying to extend the library
with their own Mutex and ScopedLock variants that they want to work
with boost::condition, and this sort of implementation detail
prevents this. So, there may be a small flaw in the design.

Anyone have any ideas about whether we should do something about
this, and if so, what?

Bill Kempf