mirror of
https://github.com/postgres/postgres.git
synced 2025-11-09 06:21:09 +03:00
Improve spinlock performance for HP-UX, ia64, non-gcc.
At least on this architecture, it's very important to spin on a non-atomic instruction and only retry the atomic once it appears that it will succeed. To fix this, split TAS() into two macros: TAS(), for trying to grab the lock the first time, and TAS_SPIN(), for spinning until we get it. TAS_SPIN() defaults to same as TAS(), but we can override it when we know there's a better way. It's likely that some of the other cases in s_lock.h require similar treatment, but this is the only one we've got conclusive evidence for at present.
This commit is contained in:
@@ -96,7 +96,7 @@ s_lock(volatile slock_t *lock, const char *file, int line)
|
||||
int delays = 0;
|
||||
int cur_delay = 0;
|
||||
|
||||
while (TAS(lock))
|
||||
while (TAS_SPIN(lock))
|
||||
{
|
||||
/* CPU-specific delay each time through the loop */
|
||||
SPIN_DELAY();
|
||||
|
||||
Reference in New Issue
Block a user