/* This wraps an SRWLock to track the owner in debug mode, adapted from NSPR and http://blogs.msdn.com/b/oldnewthing/archive/2013/07/12/10433554.aspx
*/ class owned_critical_section { public:
owned_critical_section()
: srwlock(SRWLOCK_INIT) #ifndef NDEBUG
,
owner(0) #endif
{
}
void unlock()
{ #ifndef NDEBUG /* GetCurrentThreadId cannot return 0: it is not a the valid thread id */
owner = 0; #endif
ReleaseSRWLockExclusive(&srwlock);
}
/* This is guaranteed to have the good behaviour if it succeeds. The behaviour
is undefined otherwise. */ void assert_current_thread_owns()
{ #ifndef NDEBUG /* This implies owner != 0, because GetCurrentThreadId cannot return 0. */
XASSERT(owner == GetCurrentThreadId()); #endif
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.