PostgreSQL Source Code
git master
Toggle main menu visibility
Main Page
Related Pages
Namespaces
Namespace List
Namespace Members
All
Functions
Variables
Data Structures
Data Structures
Data Structure Index
Class Hierarchy
Data Fields
All
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
~
Functions
_
a
f
h
i
n
o
p
r
s
~
Variables
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Enumerations
Files
File List
Globals
All
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Functions
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Variables
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Typedefs
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Enumerations
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
Enumerator
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
z
Macros
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
•
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Pages
spin.h
Go to the documentation of this file.
1
/*-------------------------------------------------------------------------
2
*
3
* spin.h
4
* API for spinlocks.
5
*
6
*
7
* The interface to spinlocks is defined by the typedef "slock_t" and
8
* these macros:
9
*
10
* void SpinLockInit(volatile slock_t *lock)
11
* Initialize a spinlock (to the unlocked state).
12
*
13
* void SpinLockAcquire(volatile slock_t *lock)
14
* Acquire a spinlock, waiting if necessary.
15
* Time out and abort() if unable to acquire the lock in a
16
* "reasonable" amount of time --- typically ~ 1 minute.
17
*
18
* void SpinLockRelease(volatile slock_t *lock)
19
* Unlock a previously acquired lock.
20
*
21
* bool SpinLockFree(slock_t *lock)
22
* Tests if the lock is free. Returns true if free, false if locked.
23
* This does *not* change the state of the lock.
24
*
25
* Callers must beware that the macro argument may be evaluated multiple
26
* times!
27
*
28
* Load and store operations in calling code are guaranteed not to be
29
* reordered with respect to these operations, because they include a
30
* compiler barrier. (Before PostgreSQL 9.5, callers needed to use a
31
* volatile qualifier to access data protected by spinlocks.)
32
*
33
* Keep in mind the coding rule that spinlocks must not be held for more
34
* than a few instructions. In particular, we assume it is not possible
35
* for a CHECK_FOR_INTERRUPTS() to occur while holding a spinlock, and so
36
* it is not necessary to do HOLD/RESUME_INTERRUPTS() in these macros.
37
*
38
* These macros are implemented in terms of hardware-dependent macros
39
* supplied by s_lock.h. There is not currently any extra functionality
40
* added by this header, but there has been in the past and may someday
41
* be again.
42
*
43
*
44
* Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
45
* Portions Copyright (c) 1994, Regents of the University of California
46
*
47
* src/include/storage/spin.h
48
*
49
*-------------------------------------------------------------------------
50
*/
51
#ifndef SPIN_H
52
#define SPIN_H
53
54
#include "
storage/s_lock.h
"
55
56
57
#define SpinLockInit(lock) S_INIT_LOCK(lock)
58
59
#define SpinLockAcquire(lock) S_LOCK(lock)
60
61
#define SpinLockRelease(lock) S_UNLOCK(lock)
62
63
#define SpinLockFree(lock) S_LOCK_FREE(lock)
64
65
#endif
/* SPIN_H */
s_lock.h
src
include
storage
spin.h
Generated on Mon Dec 30 2024 12:13:25 for PostgreSQL Source Code by
1.9.4