windows-nt/Source/XPSP1/NT/net/jet500/jet/dae/inc/spinlock.h
2020-09-26 16:20:57 +08:00

36 lines
656 B
C

/* SPINLOCK.H -- This file is the include file for spinlocks
**
** Created 04/20/93 by LaleD
**
*/
#ifdef DEBUG
void free_spinlock(long *);
#else
#define free_spinlock(a) *(a) = 0 ;
#endif
/*
** When /Ogb1 or /Ogb2 flag is used in the compiler, this function will
** be expanded in line
*/
__inline int get_spinlock(long VOLATILE *plock, int b)
{
# ifdef _X86_
_asm // Use bit test and set instruction
{
mov eax, plock
lock bts [eax], 0x0
jc bsy // If already set go to busy, otherwise return TRUE
} ;
#else
if (InterlockedExchange(plock, 1) == 0)
#endif
{
return(TRUE);
}
bsy:
return(get_spinlockfn(plock, b, c));
}