Linux kernel 我们可以将分支预测与原子操作一起使用吗?
我想知道我们是否可以将分支预测宏(可能/不可能)与任何原子操作一起使用。下面的陈述有什么副作用吗Linux kernel 我们可以将分支预测与原子操作一起使用吗?,linux-kernel,atomic,Linux Kernel,Atomic,我想知道我们是否可以将分支预测宏(可能/不可能)与任何原子操作一起使用。下面的陈述有什么副作用吗 atomic_t v=atomic_INIT(0); 原子能公司; 如果(不太可能(原子读取(&v))==2){ /*一些手术*/ } 在原子操作和非原子操作上使用可能/不可能没有区别。这些宏的目的只是生成在条件的两个分支之一更可能出现的情况下性能更好的代码 因此,对于“正常”操作,例如: if (unlikely(--x)) if (likely(--x)) do
atomic_t v=atomic_INIT(0);
原子能公司;
如果(不太可能(原子读取(&v))==2){
/*一些手术*/
}
在原子操作和非原子操作上使用可能
/不可能
没有区别。这些宏的目的只是生成在条件的两个分支之一更可能出现的情况下性能更好的代码
因此,对于“正常”操作,例如:
if (unlikely(--x)) if (likely(--x))
do_a(); do_a();
else else
do_b(); do_b();
*decrement x* *decrement x*
jnz not_zero jz zero
call do_b call do_a
not_zero: zero:
call do_a call do_b
而在原子操作的情况下,您只需:
if (unlikely(atomic_sub_and_test(&x))) if (likely(atomic_sub_and_test(&x)))
do_a(); do_a();
else else
do_b(); do_b();
*atomically decrement x* *atomically decrement x*
jnz not_zero jz zero
call do_b call do_a
not_zero: zero:
call do_a call do_b
在原子操作和非原子操作上使用
可能
/不可能
没有区别。这些宏的目的只是生成在条件的两个分支之一更可能出现的情况下性能更好的代码
因此,对于“正常”操作,例如:
if (unlikely(--x)) if (likely(--x))
do_a(); do_a();
else else
do_b(); do_b();
*decrement x* *decrement x*
jnz not_zero jz zero
call do_b call do_a
not_zero: zero:
call do_a call do_b
而在原子操作的情况下,您只需:
if (unlikely(atomic_sub_and_test(&x))) if (likely(atomic_sub_and_test(&x)))
do_a(); do_a();
else else
do_b(); do_b();
*atomically decrement x* *atomically decrement x*
jnz not_zero jz zero
call do_b call do_a
not_zero: zero:
call do_a call do_b
“下面的陈述有什么副作用吗?”-你认为会有什么副作用?除计时外,使用
可能
/不可能
的代码将显示与不使用该宏的代码相同的行为。在您的情况下,不太可能
是否真的提供了更好的时机,取决于许多其他因素。和往常一样:如果不确定这些宏的好处,那么就不要使用它们。“下面的语句有任何副作用吗?”-您预期会有什么副作用?除计时外,使用可能
/不可能
的代码将显示与不使用该宏的代码相同的行为。在您的情况下,不太可能
是否真的提供了更好的时机,取决于许多其他因素。与往常一样:如果不确定好处,则不要使用这些宏。