1 /*-------------------------------------------------------------------------
4 * Lightweight lock manager
7 * Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group
8 * Portions Copyright (c) 1994, Regents of the University of California
12 *-------------------------------------------------------------------------
18 * It's a bit odd to declare NUM_BUFFER_PARTITIONS and NUM_LOCK_PARTITIONS
19 * here, but we need them to set up enum LWLockId correctly, and having
20 * this file include lock.h or bufmgr.h would be backwards.
23 /* Number of partitions of the shared buffer mapping hashtable */
24 #define NUM_BUFFER_PARTITIONS 16
26 /* Number of partitions the shared lock tables are divided into */
27 #define LOG2_NUM_LOCK_PARTITIONS 4
28 #define NUM_LOCK_PARTITIONS (1 << LOG2_NUM_LOCK_PARTITIONS)
31 * We have a number of predefined LWLocks, plus a bunch of LWLocks that are
32 * dynamically assigned (e.g., for shared buffers). The LWLock structures
33 * live in shared memory (since they contain shared data) and are identified
34 * by values of this enumerated type. We abuse the notion of an enum somewhat
35 * by allowing values not listed in the enum declaration to be assigned.
36 * The extra value MaxDynamicLWLock is there to keep the compiler from
37 * deciding that the enum can be represented as char or short ...
39 * If you remove a lock, please replace it with a placeholder. This retains
40 * the lock numbering, which is helpful for DTrace and other external
59 MultiXactOffsetControlLock
,
60 MultiXactMemberControlLock
,
68 AutovacuumScheduleLock
,
70 /* Individual lock IDs end here */
72 FirstLockMgrLock
= FirstBufMappingLock
+ NUM_BUFFER_PARTITIONS
,
74 /* must be last except for MaxDynamicLWLock: */
75 NumFixedLWLocks
= FirstLockMgrLock
+ NUM_LOCK_PARTITIONS
,
77 MaxDynamicLWLock
= 1000000000
81 typedef enum LWLockMode
89 extern bool Trace_lwlocks
;
92 extern LWLockId
LWLockAssign(void);
93 extern void LWLockAcquire(LWLockId lockid
, LWLockMode mode
);
94 extern bool LWLockConditionalAcquire(LWLockId lockid
, LWLockMode mode
);
95 extern void LWLockRelease(LWLockId lockid
);
96 extern void LWLockReleaseAll(void);
97 extern bool LWLockHeldByMe(LWLockId lockid
);
99 extern int NumLWLocks(void);
100 extern Size
LWLockShmemSize(void);
101 extern void CreateLWLocks(void);
103 extern void RequestAddinLWLocks(int n
);
105 #endif /* LWLOCK_H */