gpt4 book ai didi

c++ - 为什么 boost::shared_ptr 使用 gcc 内联汇编来增加 use_count 而不是使用 operator++?

转载 作者:太空狗 更新时间:2023-10-29 23:33:39 28 4
gpt4 key购买 nike

我正在阅读 boost::shared_ptr 源代码,发现它使用这个函数来增加 shared_ptr 的使用计数(引用计数):

inline void atomic_increment( int * pw )
{
//atomic_exchange_and_add( pw, 1 );

__asm__
(
"lock\n\t"
"incl %0":
"=m"( *pw ): // output (%0)
"m"( *pw ): // input (%1)
"cc" // clobbers
);
}

为什么不简单地使用 operator++ 来做到这一点?这会带来更好的性能吗?

最佳答案

++ 运算符读取其操作数的当前值,加 1 并将结果写回。这可以是三个可中断(即被另一个线程)的步骤。如果两个线程同时执行此操作,则结果可能是错误的。为了防止这种情况必须使用原子操作或锁。这是由上面显示的 asm 代码完成的。

关于c++ - 为什么 boost::shared_ptr 使用 gcc 内联汇编来增加 use_count 而不是使用 operator++?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11532970/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com