
20 Jul
2004
20 Jul
'04
8:13 p.m.
Alexander Terekhov wrote:
Alexander Terekhov wrote: [...]
Err. m_retry_event.wait(), m_retry_event.set();
I mean
void lock() throw() { if (int lock_status = m_lock_status.cas(0, 1, msync::ddacq)) { do if (lock_status < 0 || m_lock_status.cas(1,-1, msync::ddacq)) m_retry_event.wait(); while (lock_status = m_lock_status.cas(0, 1, msync::ddacq)); m_retry_event.set(); } }
bool trylock() throw() { return !m_lock_status.cas(0, 1, msync::ddacq); }
void unlock() throw() { if (m_lock_status.swap(0, msync::rel) < 0) m_retry_event.set(); }
Bad day. It still can go boom. Forget it. lock_queue is the way to go. regards, alexander.