标签:mic div 基本概念 mem 一致性 队列 compare 临时 sign
CAS
学习无锁队列前先看一个基本概念,CAS原子指令操作。
CAS(Compare and Swap,比较并替换)原子指令,用来保障数据的一致性。
指令有三个参数,当前内存值V、旧的预期值A、更新的值B,当且仅当预期值A和内存值V相同时,将内存值修改为B并返回true,否则什么都不做,并返回false。
在DPDK中封装后的函数如下:
rte_atomic32_cmpset(&r->prod.head, *old_head, *new_head)
&r->prod.head指向当前内存值,*old_head为执行该操作前将r->prod.head存储到临时变量的值,*new_head为即将更新的值。
只有r->prod.head == *old_head才会将r->prod.head更新为*new_head
rte_atomic32_cmpset(volatile uint32_t *dst, uint32_t exp, uint32_t src) { unsigned int ret = 0; asm volatile( "\tlwsync\n" "1:\tlwarx %[ret], 0, %[dst]\n" "cmplw %[exp], %[ret]\n" "bne 2f\n" "stwcx. %[src], 0, %[dst]\n" "bne- 1b\n" "li %[ret], 1\n" "b 3f\n" "2:\n" "stwcx. %[ret], 0, %[dst]\n" "li %[ret], 0\n" "3:\n" "isync\n" : [ret] "=&r" (ret), "=m" (*dst) : [dst] "r" (dst), [exp] "r" (exp), [src] "r" (src), "m" (*dst) : "cc", "memory"); return ret; }
标签:mic div 基本概念 mem 一致性 队列 compare 临时 sign
原文地址:https://www.cnblogs.com/dream397/p/13646492.html