x86芯片Linux系统32位和64位CAS无锁函数实现

本文介绍了x86芯片在Linux系统中32位和64位的CAS(Compare and Swap)无锁函数实现。通过利用 cmpxchgl 指令,实现了 cas32_lock, cas32_unlock, cas64_lock 和 cas64_unlock 函数,以实现高效且无锁的并发操作。" 54375650,5808831,layer弹窗样式自定义技巧,"['前端开发', 'layer框架', 'CSS', 'HTML', 'UI设计']
摘要由CSDN通过智能技术生成

所谓的CAS无锁是借助芯片提供的一些特性,主动检查锁状态。

x86芯片提供了cmpxchgl这条指令。

先列出32位的无锁函数,分为cas32_lock和cas32_unlock。

int cas32_lock(int *p)
{
	asm
	(
		"pushl %%eax;\n\t"
		"pushl %%ecx;\n\t"
		"l1: movl %1, %%ecx;\n\t"
		"movl %2, %%eax;\n\t"
		"lock cmpxchgl %%ecx,%0;\n\t"
		"jne l1;\n\t"
		"popl %%ecx;\n\t"
		"popl %%eax;\n\t"
		:"+m"(*p):"i"(0),"i"(1)
		:"%eax","%ecx"
	);
	return 0;
}

int cas32_unlock(int *p)
{
	asm
	(
		"pushl %%eax;\n\t"
		"movl %1, %%eax;\n\t"
		"movl %%eax, %0;\n\t"
		"popl %%eax;\n\t"
		:"+m"(*p):"i"(1)
		:"%eax"
	);
	return 0;
}


然后是64位的无锁函数实现cas64_lock,cas64_unlock

int cas64_lock(int *p)
{
        asm
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值