blob: 1048c47f4265e92312959f110d5b7319df41121d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
#pragma once
// based on code by Jeff Preshing
// this is a synchronization class that prefers
// undefined behaviour over deadlock. It's utterly broken
// and needs to be replaced in time.
class RecursiveBenaphore
{
public:
RecursiveBenaphore();
~RecursiveBenaphore();
// wait on the semaphore. after timeout this will check if the current owner
// thread is still alive and steal the semaphore if it isn't. Otherwise this
// will continue to wait.
void wait(DWORD timeout = INFINITE);
void signal();
private:
LONG m_Counter;
DWORD m_OwnerId;
int m_Recursion;
HANDLE m_Semaphore;
};
|