5 int mtx_lock(mtx_t *mtx)
\r
7 DWORD myId = GetCurrentThreadId();
\r
9 if(mtx->_ThreadId == myId) {
\r
11 return thrd_success;
\r
14 DWORD res = InterlockedIncrement(&mtx->_State);
\r
16 mtx->_ThreadId = myId;
\r
17 return thrd_success;
\r
20 // If that increment didn't leave the state == 0, then we have contention
\r
21 // -> block on the wait event handle
\r
22 DWORD rv = WaitForSingleObject(mtx->_WaitEvHandle, INFINITE);
\r
23 if(rv != WAIT_OBJECT_0)
\r
26 // We now own the mutex - so set it up for our use
\r
27 mtx->_ThreadId = myId;
\r
28 return thrd_success;
\r
33 #include <_PDCLIB_test.h>
\r
37 return TEST_RESULTS;
\r