|
Boost : |
From: Bill Wade (bill.wade_at_[hidden])
Date: 2000-09-08 11:26:13
> From: William Kempf [mailto:sirwillard_at_[hidden]]
> Here's a
> quick "unsafe_lock" template to allow for the functionality being
> requested using nothing but the current boost interface.
Excellent.
For code review let me suggest
1) Consider making locking recursive (change bool m_locked to size_t
m_lock_count).
2) m_lock might not be properly aligned. Change (these lines aren't
adjacent)
> unsafe_lock(M& mx) : m_mx(mx), m_locked(false) { lock(); }
> new ((void*)m_lock) M::lock(m_mx);
> char m_lock[sizeof(M::lock)];
to
unsafe_lock(M& mx): m_mx(mx), m_locked(true), m_lock(mx){}
new((void*)&m_lock) M::lock(m_mx);
M::lock m_lock
and change every occurrence of "((M::lock*)m_lock)->" to "m_lock."
Mostly unrelated question:
Have you got a way to atomically convert a non-recursive
MutexTryLock::try_lock into a MutexLock::lock that can be used with a cv?
How do I get non-blocking access to a cv (and its associated mutex)?
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk