该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
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)/**即锁没有被占用**/
{
(*LK).lock=1;
(*LK).

本文介绍了C语言中自定义锁的结构体定义及其实现,包括加锁、解锁、更改锁类型和等待锁的函数。通过原子操作elemExchg实现线程安全的锁交换,并确保只有创建锁的线程能进行解锁或更改锁类型。同时,提供了等待加锁的函数,通过循环尝试加锁并间隔1ms以避免过度消耗资源。
最低0.47元/天 解锁文章
1871

被折叠的 条评论
为什么被折叠?



