home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
NeXTSTEP 3.2 (Developer)
/
NS_dev_3.2.iso
/
NextDeveloper
/
Headers
/
mach
/
i386
/
simple_lock.h
< prev
next >
Wrap
Text File
|
1993-10-19
|
1KB
|
90 lines
/*
* Copyright (c) 1992 NeXT Computer, Inc.
*
* Simple spin locks.
*
* HISTORY
*
* 19 November 1992 David E. Bohman at NeXT
* Created.
*/
#import <mach/boolean.h>
#ifndef _MACH_I386_SIMPLE_LOCK_H_
#define _MACH_I386_SIMPLE_LOCK_H_
struct slock {
boolean_t locked;
};
typedef struct slock simple_lock_data_t;
typedef struct slock *simple_lock_t;
extern simple_lock_t simple_lock_alloc(void);
extern void simple_lock_free(simple_lock_t);
#if !defined(DEFINE_SIMPLE_LOCK_PRIMS)
static __inline__
#endif
void
simple_lock_init(
simple_lock_t slock
)
{
slock->locked = FALSE;
}
#if !defined(DEFINE_SIMPLE_LOCK_PRIMS)
static
#endif
__inline__
boolean_t
simple_lock_try(
simple_lock_t slock
)
{
boolean_t result;
asm volatile(
"xchgl %1,%0; xorl %3,%0"
: "=r" (result), "=m" (slock->locked)
: "0" (TRUE), "i" (TRUE));
return (result);
}
#if !defined(DEFINE_SIMPLE_LOCK_PRIMS)
static __inline__
#endif
void
simple_lock(
simple_lock_t slock
)
{
do
{
while (slock->locked)
continue;
}
while (!simple_lock_try(slock));
}
#if !defined(DEFINE_SIMPLE_LOCK_PRIMS)
static __inline__
#endif
void
simple_unlock(
simple_lock_t slock
)
{
boolean_t result;
asm volatile(
"xchgl %1,%0"
: "=r" (result), "=m" (slock->locked)
: "0" (FALSE));
}
#endif _MACH_I386_SIMPLE_LOCK_H_