11.1.1 Design

The hope is to use RCU rather than final_mutex to protect the thread traversal in read_count() in order to obtain excellent performance and scalability from read_count(), rather than just from inc_count(). However, we do not want to give up any accuracy in the computed sum. In particular, when a given thread exits, we absolutely cannot lose the exiting thread's count, nor can we double-count it. Such an error could result in inaccuracies equal to the full precision of the result, in other words, such an error would make the result completely useless. And in fact, one of the purposes of final_mutex is to ensure that threads do not come and go in the middle of read_count() execution.

Quick Quiz 11.2: Just what is the accuracy of read_count(), anyway? End Quick Quiz

Therefore, if we are to dispense with final_mutex, we will need to come up with some other method for ensuring consistency. One approach is to place the total count for all previously exited threads and the array of pointers to the per-thread counters into a single structure. Such a structure, once made available to read_count(), is held constant, ensuring that read_count() sees consistent data.

Paul E. McKenney 2011-12-16