前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >linux _InterlockedCompareExchange128的实现

linux _InterlockedCompareExchange128的实现

作者头像
用户4766018
发布2022-08-19 09:03:48
3060
发布2022-08-19 09:03:48
举报
文章被收录于专栏:格物致知格物致知

#include <stdint.h> namespace types { struct uint128_t { uint64_t lo ; uint64_t hi ; } __attribute__ (( __aligned__ ( 16 ) )); } template < class T > inline bool cas ( volatile T * src , T cmp , T with ); template <> inline bool cas ( volatile types :: uint128_t * src , types :: uint128_t cmp , types :: uint128_t with ) { bool result ; __asm__ __volatile__ ( "lock cmpxchg16b %1\n\t" "setz %0" : "=q" ( result ) , "+m" ( * src ) , "+d" ( cmp . hi ) , "+a" ( cmp . lo ) : "c" ( with . hi ) , "b" ( with . lo ) : "cc" ); return result ; } int main () { using namespace types ; uint128_t test = { 0xdecafbad , 0xfeedbeef }; uint128_t cmp = test ; uint128_t with = { 0x55555555 , 0xaaaaaaaa }; return ! cas ( & test , cmp , with ); }

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2012-04-01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档