该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
typedef struct LOCK
{
int volatile preLock;
int volatile lock:1;
int volatile TP:2;
int volatile ID;
}LOCK;
/********************************************/
/**
void elemExchg(void* a,void* b)
原子操作,用于交换两个变量的值
传入的值为指针类型
仅适用于X86/64
**/
/********************************************/
void elemExchg(void volatile *a,void volatile *b)
{
_asm
{
MOV eax ,a;
MOV ebx ,b;/**获取a,b的地址**/
MOV ecx,[eax] ;存入a
XCHG ecx,[ebx];/**不管怎样先写入占用**/
XCHG [eax],ecx;/**读取获取的结果**/
}
}
int Lock(LOCK* LK,int TP)
{
int RV;
while(!(RV=rand()));
elemExchg(&((*LK).preLock),&RV);
if (RV==0)/**即锁没有被占用**/
{