gpt4 book ai didi

c - 如何在这个简单的互斥实现中实现 "exponential backoff"?

转载 作者:太空狗 更新时间:2023-10-29 17:18:26 26 4
gpt4 key购买 nike

我的互斥量实现只是在 CAS 失败时重试(伪代码):

while(!compare_and_swap(&mutex, 0, 1));

但它浪费了太多的 CPU 周期。

我了解到“指数退避”可以提高整体性能。如何在C中实现退避延迟?

  • 是否有精确的计时器 API(以实现退避延迟)?
  • 操作系统是否提供任何设施来实现退避?

最佳答案

Exponential backoff是一种简单的算法,可以在重复失败的情况下以乘法方式降低尝试率。是的,如果许多线程不断访问共享变量,在重试 CAS 之前稍等片刻通常可以提高整体性能。

实现此原则的最简单想法是使用指数增长的 sleep 。例如:

#include <unistd.h>

// ...

useconds_t delay = 100000; // Delay in usec

while (!compare_and_swap(&mutex, 0, 1))
{
usleep(delay);
if (delay < MAX_DELAY)
{
delay *= 2;
}
}

请注意,最好限制延迟以防止“永远”休眠。根据您的喜好为 MAX_DELAY 选择一个合理的值。

关于c - 如何在这个简单的互斥实现中实现 "exponential backoff"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19657361/

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