我需要根据分钟间隔监控内部流量,所以我决定做这样的事情:
Flow{
void send();
static uint accumulator;
}
//Only single thread call to send
void Flow::sendPacket(pck){
accumulator+=pck.size();
do();
}
//Only single thread call to monitor . **No the same thread that call to send!**
Monitor::monitor(){
//Start monitor
Flow::accumulator = 0;
sleep(60);
rate = accumulator/60;
}
如果不使用 atomic ,我可以有初始化为 0 的风险不会正确发生吗?
我担心的是,即使是原子也不会保证 init,因为如果同时将 init 监视为 0,并且同时使用旧值进行累积,那么新的累积值将基于旧值而不是 init 值.
另外我担心原子惩罚。send 为每个数据包调用。