分間隔に基づいて内部トラフィックを監視する必要があるため、次のようなことを行うことにしました。
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;
}
アトミックを使用せずに、0に初期化されないリスクが正しく発生しない可能性はありますか?
私の懸念は、アトミックでさえinitを保証しないことです。なぜなら、同時にinitを0に監視し、同時に累積が古い値で行われる場合、新しい累積値はinit値ではなく、古い値に基づくからです。 。
さらに、私は原子のペナルティから懸念しています。sendはパケットごとに呼び出されます。