44 ProfileFastCS& operator=(
const ProfileFastCS&);
46 volatile unsigned m_Flag;
47 static HANDLE testEvent;
49 void ThreadSafeSetFlag()
51 volatile unsigned& nFlag=m_Flag;
53 #define ts_lock _emit 0xF0
54 DASSERT(((
unsigned)&nFlag % 4) == 0);
56 __asm mov ebx, [nFlag]
58 __asm bts dword ptr [ebx], 0
59 __asm jc The_Bit_Was_Previously_Set_So_Try_Again
62 The_Bit_Was_Previously_Set_So_Try_Again:
65 ::WaitForSingleObject(testEvent,1);
66 __asm mov ebx, [nFlag]
68 __asm bts dword ptr [ebx], 0
69 __asm jc The_Bit_Was_Previously_Set_So_Try_Again
72 void ThreadSafeClearFlag()
86 Lock& operator=(
const Lock&);
88 ProfileFastCS& CriticalSection;
94 CriticalSection.ThreadSafeSetFlag();
99 CriticalSection.ThreadSafeClearFlag();