- Resets all statistics to 0.
- In order to reset, we add up all the thread-local statistics data, and
- set rootData to the negative of that.
- This may seem like a counterintuitive way to reset the statsitics. Why
- can't we just zero out all the thread-local data? Well, thread-local
- data can only be modified by the thread that owns it. If we tried to
- modify the thread-local data from this thread, our modification might get
- interleaved with a read-modify-write operation done by the thread that
- owns the data. That would result in our update getting lost.
- The approach used here avoids this problem because it only ever reads
- (not writes) the thread-local data. Both reads and writes to rootData
- are done under the lock, so we're free to modify rootData from any thread
- that holds the lock.