Justin Erenkrantz wrote:
On Tue, Jun 26, 2001 at 10:49:42AM -0700, Brian Pane wrote:
Please forgive me if this issue has been covered previously, but I've been wondering lately about whether it would be useful to add support for lightweight spin-locks as a complement to the current intraprocess locks in APR. There are some places, like the pool memory allocator, where a spinlock might perform better than a pthread mutex. Thoughts?
Well, I just about to write a message saying that we ought to remove the
mutexes from the pool memory allocator code ANYWAY. AFAICT, the pool
only needs to be locked when the pool is shared across workers - which only seems to be the case with the global or child pool. Locking the
pool should be the exception, not the norm. What Cliff just suggested
about APR_XTHREAD sounds like it could apply to the pool as well.
I'm all in favor of getting rid of the mutexes in the pool allocator code where possible. I think locking is inevitable, though, in order to handle the allocation of new blocks for a pool--which seems to be where most of the mutex lock/unlock behavior in the httpd is currently. That's where it would be nice to have a more lightweight alternative to a pthread mutex.
I think the implementation would have to be a set of N+1 architecture-specificAs far as spinlocks go, can these be done in a crossplatform way? The issue is that we need an atomic operation to do the spinlock in.
ifdef blocks: N containing the inline assembly directives for N supported
processors, and one containing a pthread mutex based fallback implementation.
--Brian
