6 c performance
我的互斥实现只是重试CAS失败(伪代码):
while(!compare_and_swap(&mutex, 0, 1));
Run Code Online (Sandbox Code Playgroud)
但它浪费了太多的CPU周期.
我了解到"指数退避"可以提高整体性能.如何在C中实现退避延迟?
Eit*_*n T 12
指数退避是一种简单的算法,可以在重复失败的情况下以乘法方式降低尝试率.是的,如果许多线程不断访问共享变量,在重试CAS之前稍等一会,通常可以提高整体性能.
实现这一原则时想到的最简单的想法是使用指数级增长的睡眠.例如:
#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;
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,限制延迟以防止"永恒"睡眠是个好主意.MAX_DELAY根据自己的喜好选择合理的价值.