gpt4 book ai didi

c++ - 忙等待自旋锁所花费的 CPU 周期

转载 作者:行者123 更新时间:2023-11-30 05:39:53 34 4
gpt4 key购买 nike

到目前为止,我有一个很好的自旋锁,可以用作 intendend:

    std::atomic_flag barrier = ATOMIC_FLAG_INIT;

inline void lock( ){
while( barrier
.test_and_set( std::memory_order_acquire ) )
{}
}

但是我想知道(指示性地)其中花费了多少 CPU 周期(如果忙等待时间太长,我可能会考虑一个至少让等待线程休眠的互斥体):

    inline void lock( int & waitCounter){
while( barrier
.test_and_set( std::memory_order_acquire ) )
waitCounter++;
}

当然,这不会对锁定指令本身进行计数,因此我应该将 waitCounter 递增到哪个常量以准确了解忙等待所花费的周期(我认为由于内存屏障,指令不会被流水线化,因此计数理论上相当精确)?

waitCounter+=2;
waitCounter+=3;
waitCounter+=4; //...

最佳答案

自旋锁所需的周期数取决于许多因素,包括尝试同时执行自旋锁的线程数。

我最近对此进行了测试,here .

简短的回答:它可能因您能够直接控制的事物(应用程序代码)和您不能直接控制的事物(总线争用)而有很大差异。最小循环数和最大循环数之间的关系可以是 110 到 950 或更大。

关于c++ - 忙等待自旋锁所花费的 CPU 周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32051573/

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