本节书摘来自华章出版社《Ceph源码分析》一书中的第2章,第2.5节Throttle,作者常涛,更多章节内容可以访问云栖社区“华章计算机”公众号查看
2.5 Throttle类Throttle用来限制消费的资源数量(也常称为槽位“slot”),当请求的slot数量达到max值时,请求就会被阻塞,直到有新的槽位释放出来,代码如下:`class Throttle { CephContext *cct; const std::string name; PerfCounters *logger; ceph::atomic_t count, max; // count:当前占用的slot的数量 // max:sloct数量的最大值 Mutex lock; //等待的锁 list cond; //等待的条件变量 ……}`函数get用于获取数量为c个slot,参数c默认为1,参数m默认为0,如果m不为默认的0值,就用m值重新设置slot的max值。如果成功获取数量为c个slot,就返回true,否则就阻塞等待。例如:bool Throttle::get(int64_t c, int64_t m) 函数get_or_fail当获取不到数量为c个slot时,就直接返回false,不阻塞等待:bool Throttle::get_or_fail(int64_t c)函数put用于释放数量为c个slot资源:int64_t Throttle::put(int64_t c)