On Sun, 21 May 2023 07:54:25 +0000, Hao Lee wrote: > On Fri, May 19, 2023 at 10:27:48PM +0900, Akira Yokosawa wrote: >> On Fri, 19 May 2023 06:28:47 +0000, Hao Lee wrote: >>> On Thu, May 18, 2023 at 10:50:51AM +0900, Akira Yokosawa wrote: >>>> Hi, >>>> >>>> On Wed, 17 May 2023 12:01:10 +0000, Hao Lee wrote: >>>>> Hi, Paul >>>>> >>>>> I noticed that QuickQuiz 5.46 is causing confusion due to the fact that >>>>> balance_count() and flush_local_count() are both located within the >>>>> slowpath and are called sequentially. As a result, it is impossible for >>>>> them to compete for the counterandmax thread-local variable. >>>> >>>> Right. >>>> And that's exactly what is mentioned in the answer to the quiz. >>>> >>>> I guess it confused you because you didn't expect such an easy one, >>>> no ? :-) >>> >>> In fact I'm confused about the question description. >>> I believe that this quiz should focus on the concurrency of global >>> variables, rather than on the concurrency of the atomic variable >>> `counterandmax`, which is currently the main focus of the description. >> >> Hmm, sorry but I'm afraid I don't get your point ... >> >> Could you share the question you'd expect to see in place of >> Quick Quiz 5.46? > > Hi, I don't think this question should exist according to my > understanding... > > Let's approach this question from a different perspective. The answer > emphasizes that the gblcnt_mutex prevents concurrency problems. Let's > assume that neither balance_count() nor flush_local_count() is holding > the gblcnt_mutex. Would the counterandmax variable encounter concurrency > problems? I don't think so because counterandmax is an atomic variable > and is always safe, even without using any locks. I'm not sure, but you might be missing subtle wording in the quiz part of Quick Quiz 5.46 (quoted below): Given that the atomic_set() primitive does a simple store to the specified atomic_t, ... Here, "simple store" means a normal store which doesn't involve any atomic operations (at instruction level). atomic_read() and atomic_set() are for accessing atomic_t variables without any costly atomic operations. Which is why Quick Quiz 5.46 has been there for more than a decade. Perhaps, you might be interested in Quick Quiz B.12 as well. HTH, Akira > >> >> Thanks, Akira >> >>> >>>> >>>> Thanks, Akira >>>> >>>>> Therefore, >>>>> I believe that this quiz may be referring to the global variables >>>>> globalcount and globalreserve. >>>>> >>>>> Thanks, >>>>> Hao Lee