void DUChainLock::releaseWriteLock() { Q_ASSERT(currentThreadHasWriteLock()); //The order is important here, m_writerRecursion protects m_writer if(d->m_writerRecursion == 1) { d->m_writer = 0; d->m_writerRecursion = 0; }else{ d->m_writerRecursion.fetchAndAddOrdered(-1); } }
void DUChainLock::releaseWriteLock() { Q_ASSERT(currentThreadHasWriteLock()); //The order is important here, m_writerRecursion protects m_writer //TODO: could testAndSet here if (d->m_writerRecursion.load() == 1) { d->m_writer = nullptr; d->m_writerRecursion = 0; } else { d->m_writerRecursion.fetchAndAddOrdered(-1); } }