以下算法的免锁定算法版本
lock free algorithm version for for below algorithm
我正在编写一个网络控制功能,因此算法是
- 读取当前传输速率
-
如果它小于所需的传输速率,则继续其他的睡眠x秒,然后进入步骤1:
-
x是基于所需传输速率和当前传输速率来计算的。
你能建议一下如何使这个算法线程安全的
这取决于线程安全的含义。如果"线程安全"的意思是"不会崩溃、死锁或活锁",那么只需简单地:
x = atomic_read(current_transfer_rate);
memory_barrier();
if (x >= required_xfer_rate)
sleep(f(x));
请注意,将current_transfer_rate
捕获到局部变量,然后发出内存屏障非常重要(具体如何执行取决于编译器)。这将确保编译器不会多次读取变量,从而可能产生不一致的结果。
当然,其他进程/线程可能会发送更多的数据,在传输之前增加current_transfer_rate,从而导致current_transfer超出限制。避免这种情况的唯一方法是为传输设置中央锁或队列,或者原子地"保留"传输容量。
相关文章:
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 基于ELO的团队匹配算法
- 如何找到锁定Linux futex的C++行
- C++选择排序算法中的逻辑错误
- G锁定铸造到基础上会释放模拟行为
- 有没有办法将谓词中的元素偏移量传递给 std 算法?
- C++A*算法并不总是在路径中具有目标节点
- 排序算法c++
- 构建可组合有向图(扫描仪生成器的汤普森构造算法)
- 如何检查线程是否锁定
- 算法问题:查找从堆栈中弹出的所有序列
- 下面是排序算法O(n)吗
- 如何在C++中找到active directory中禁用和锁定的窗口帐户
- KMP算法和LPS表构造的运行时间
- 我应该在锁定TBitmap画布后解锁它吗
- 为什么我的排序算法会更改数组值
- 求最大元素位置的分治算法
- 具有非整数边容量的最大流量的Dinic算法
- 到连接组件算法的问题(递归)
- 以下算法的免锁定算法版本