I found this problem conceptually interesting and worth of generalization in many contexts. I'd like to know if Neil got around the problem with something that could be a satisfying solution.

thanks

  -- Massimo

On 06/28/2011 04:57 AM, Neil McKee wrote:
Hi,

Here's an easy question for someone who knows their way around...

I want to maintain a new global counter,  but for performance reasons I am 
reluctant to use a mutex or atomic_increment to update it.  I would rather 
maintain a separate counter for every worker-thread,  and only accumulate the 
global counter when required.  (If the per-worker-thread counter is 32-bit then 
I shouldn't even need a mutex when accumulating the total across all the 
current threads).

Obviously I shouldn't just declare something as "__thread apr_int32_t 
mycounter;" and mince it together as a linux-only hack.  I'd like to find the 
portable apr-library way to do it.   So I think I need to find the following:

* - a hook that is called whenever a worker thread is started
* - a hook that is called whenever a worker thread is about to die
* - a hook to find_or_create a 32-bit integer that is private to the current 
worker-thread
* - a fn to iterate (safely) over all the current worker threads

It's the last one that seems particularly elusive.  I could't find an ap_ or 
apr_ library call that seemed to do anything like that.

If this has all been done before,   please can you point me to the relevant 
module sources?  I think it would save me a lot of time.   Alternatively,  if 
you think I should just relax and use an atomic increment instead,  then let me 
know.

Thanks!

Neil

Reply via email to