summaryrefslogtreecommitdiff
path: root/src/include/storage/condition_variable.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/include/storage/condition_variable.h')
-rw-r--r--src/include/storage/condition_variable.h11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/include/storage/condition_variable.h b/src/include/storage/condition_variable.h
index 0b7578f8c4c..6310ca230af 100644
--- a/src/include/storage/condition_variable.h
+++ b/src/include/storage/condition_variable.h
@@ -31,6 +31,17 @@ typedef struct
proclist_head wakeup; /* list of wake-able processes */
} ConditionVariable;
+/*
+ * Pad a condition variable to a power-of-two size so that an array of
+ * condition variables does not cross a cache line boundary.
+ */
+#define CV_MINIMAL_SIZE (sizeof(ConditionVariable) <= 16 ? 16 : 32)
+typedef union ConditionVariableMinimallyPadded
+{
+ ConditionVariable cv;
+ char pad[CV_MINIMAL_SIZE];
+} ConditionVariableMinimallyPadded;
+
/* Initialize a condition variable. */
extern void ConditionVariableInit(ConditionVariable *cv);