> -----Original Message-----
> From: William Kempf [mailto:sirwillard@my-deja.com]
> Sent: Thursday, September 14, 2000 4:39 PM
> To: boost@egroups.com
> Subject: [boost] Re: thread lock/unlock example
>
> > I mentioned it as an example of an inclusive, or humble,
> interface. It
> > allows the programmer access if needed, but discourages misuse
> through
> > protected access. It doesn't assume that the library designers
> have thought
> > of every possible use. It also shows a precedent in the STL for
> allowing
> > more access through derivation.
>
> It doesn't apply here, though.
Ah, okay.
> >
> > It's relying on the interface. The only interface provided is
> > construction/destruction. Just because unsafe_lock<> can be
> implemented
> > with the existing interface doesn't mean that the interface is
> adequate.
>
> How is it inadequate?
>
What if I want an unsafe_trylock? An unsafe_timedlock? Another type of lock that you haven't thought of? Construction/destruction of the 3 lock classes that you've thought of is too thin an interface.
> >
> > template <typename M>
> > class mutex_accessor
> > {
> > private:
> > mutex_accessor(const mutex_accessor&);
> > operator=(const mutex_accessor);
> >
> > protected:
> > mutex_accessor(M& mx) : m_mx(mx.m_mx) {}
> > ~mutex_accessor() {} // intentionally nonvirtual
> >
> > void lock() { m_mx.lock(); }
> > bool trylock() { return m_mx.trylock(); }
> > bool timedlock(int milliseconds) { return
> > m_mx.timedlock(milliseconds); }
> > void unlock() { m_mx.unlock(); }
> >
> > private:
> > M::impl& m_mx;
> > };
> >
> > Now, if I were to think of a useful lock type that you hadn't
> thought of, I
> > could implement it by deriving from mutex_accessor<>.
>
> That's precisely what I thought you meant. However, mutex_accessor<>
> is publicly available, so it provides no added security (only a
> psychological one, which I suppose may be a valid argument... after
> all that's one reason why I'm ok with unsafe_lock<>). Given that the
> thousand dollar question is why you just didn't expose this on mutex
> to begin with.
>
How does it provide no added security? (No added security over what?) All of mutex_accessor<>'s methods are protected or private. You have to derive from it in order to access the underlying mutex. Are we protecting from a misinformed call to mutex.unlock(), or are we trying to keep someone from implementing a lock class without resorting to heroics? You can't just instantiate a mutex_accessor<> and manipulate a mutex. You derive from it in order to construct some sort of useful lock class. I don't suggest exposing them on the mutex to begin with because that is an entirely different approach.
>
> I understand what you're saying, but I think this is no different
> from exposing this functionality on mutex directly.
>
But it is quite different. The mutex_accessor<> grants access only to derived classes. basic_lock<M>, basic_trylock<M>, and basic_timedlock<M> would be examples. If someone thinks of a lock template that you haven't thought of, they can derive from mutex_accessor<> to implement it. This is different from granting blanket access to mutex.lock() and mutex.unlock().
Maybe you can explain how mutex_accessor<> grants too much access?
Eric Swanson