令牌桶算法的 C++ 实现
最编程
2024-03-07 13:08:26
...
以下是一个简单的 C++ 实现代码:
#include <iostream>
#include <chrono>
#include <thread>
class TokenBucket {
public:
TokenBucket(int rate, int capacity)
: rate_(rate),
capacity_(capacity),
tokens_(0),
last_time_(std::chrono::system_clock::now()) {}
bool get_token() {
std::chrono::time_point<std::chrono::system_clock> now =
std::chrono::system_clock::now();
std::chrono::duration<double> elapsed_seconds = now - last_time_;
last_time_ = now;
tokens_ += elapsed_seconds.count() * rate_;
if (tokens_ > capacity_) {
tokens_ = capacity_;
}
if (tokens_ < 1.0) {
return false;
} else {
tokens_ -= 1.0;
return true;
}
}
private:
double rate_;
double capacity_;
double tokens_;
std::chrono::time_point<std::chrono::system_clock> last_time_;
};
int main() {
TokenBucket tb(2, 10); // 每秒生成2个令牌,容量为10个令牌
while (true) {
if (tb.get_token()) {
std::cout << "Got token" << std::endl;
} else {
std::cout << "not enough tokens" << std::endl;
}
std::this_thread::sleep_for(std::chrono::seconds(1));
}
return 0;
}
这个代码实现了一个可以生成令牌的令牌桶,每秒生成指定的令牌数,并且有一个容量限制。如果桶中的令牌数不够,则调用 get_token
函数返回 false
;如果令牌数足够,则从桶中扣除一个令牌并返回 true
。
推荐阅读
-
二维高斯曲面拟合法的 C++ 实现,用于寻找光斑中心和算法
-
字符串匹配算法以及 KMP、BM、Sunday 等的实现。
-
C++ SUNDY 算法(BM 算法的改进版)
-
[字符串匹配] BM(Boyer-Moore)字符串匹配算法详细摘要(附 C++ 实现代码)
-
BM 算法的 C/C++ 代码实现
-
BM算法的实现
-
Pytorch 键控算法 深度图像匹配模型的实现
-
身份证最后一位校验码的算法实现
-
照片特定风格转换 Stylar AI;GPT-4V 开放源替代 InternVL;纯 C/C++ 实现的稳定扩散库;基于 AI 的数据爬行
-
2024年python实现猫和老鼠的游戏_乌龟怎么做猫和老鼠的游戏(1), 2024年最新阿里社交招聘算法面试