In count_unregister_thread, both adding the counter to total and NULLs the exiting thread's counterp[] array element happen before publishing the newly allocated cap. Therefore, count_unregister_thread() can not result in the outgoing thread's work to be double counted. Signed-off-by: Alan Huang <mmpgouride@xxxxxxxxx> --- together/applyrcu.tex | 9 --------- 1 file changed, 9 deletions(-) diff --git a/together/applyrcu.tex b/together/applyrcu.tex index 1e69fe3e..09a265f7 100644 --- a/together/applyrcu.tex +++ b/together/applyrcu.tex @@ -151,15 +151,6 @@ is invoked by each newly created thread. So, interestingly enough, when adding a new thread, this implementation gets the effect of allocating a new structure, but without actually having to do the allocation. - - \begin{fcvref}[ln:count:count_end_rcu:whole:unreg] - On the other hand, \co{count_unregister_thread()} can result - in the outgoing thread's work being double counted. - This can happen when \co{read_count()} is invoked between - \clnref{add,null}. - There are efficient ways of avoiding this double-counting, but - these are left as an exercise for the reader. - \end{fcvref} }\QuickQuizEnd \begin{fcvref}[ln:count:count_end_rcu:whole:unreg] -- 2.34.1