Path: ...!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!eternal-september.org!.POSTED!not-for-mail From: "Chris M. Thomasson" Newsgroups: comp.lang.c++ Subject: Re: Solving thundering Herd with glibc... Date: Tue, 29 Apr 2025 12:26:41 -0700 Organization: A noiseless patient Spider Lines: 39 Message-ID: References: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Injection-Date: Tue, 29 Apr 2025 21:26:42 +0200 (CEST) Injection-Info: dont-email.me; posting-host="dbdb37fffe3643a23b75089f628d1828"; logging-data="2632106"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/aJBPqk/hzcrh9qzP83aYQOESMxpimle4=" User-Agent: Mozilla Thunderbird Cancel-Lock: sha1:lAICJvlmomUVuAEpuRDQF+keA5M= In-Reply-To: Content-Language: en-US Bytes: 2861 On 4/26/2025 8:18 PM, Bonita Montero wrote: > Am 26.04.2025 um 23:41 schrieb Chris M. Thomasson: > >> On 4/26/2025 12:25 AM, Bonita Montero wrote: > >>> >>> I just tried to awaken all 31 threads from outside holding the mutex, >>> but not from inside: >>> >>>      for( size_t r = N; r; --r ) >>>      { >>>          unique_lock lock( mtx ); >>>          signalled = nClients; >>>          ai.store( nClients, memory_order_relaxed ); >>>          lock.unlock(); >>>          if( argc < 2 ) >>>              cv.notify_all(); >>>          else >>>              for( int c = nClients; c; cv.notify_one(), --c ); >>>          bs.acquire(); >>>      } >>> >>> The result: 7.500 context switches per thread, not 3.000. >>> >>>      10000 rounds, >>>      7498.06 context switches pe thread >>> >>> So never signal a condvar to multiple threads from outside ! > >> So, do that. It's your software. Do what you like. This is a very old >> debate. Take your contrived test and just, roll with it. Whatever. > > There's nothing to debate, I've measured it: If you awake a single > thread it doesn't matter if you awake from inside or outside, if you > awake multiple threads awakening them from inside is multiple times > faster. > Yawn.