#ifndef _SPINLOCK_H

#define _SPINLOCK_H

typedef struct __SPINLOCK_TYPE 
{
	int count; // for recursion.
	int owner;

	int ticket[16]; // allow up to 16 CPUs.
	int choiceInProgress[16];
	
	int deleteInProgress;
	
} spinlock_t;

enum spinlock_returns 
{ 
	SPINLOCK_SUCCESS, 
	SPINLOCK_FAIL_DELETING
};

spinlock_t * spinlockCreate();
void spinlockInit(spinlock_t *);
void spinlockDelete(spinlock_t *);

int spinlockLock(spinlock_t *, int);
int spinlockUnlock(spinlock_t *, int);

#endif



