+#define array_lock(array) \
+ ((array).locked || \
+ (mlock((array).data, (array).len * sizeof(*(array).data)) == 0 \
+ && ((array).locked = true)))
+#define array_unlock(array) \
+ if ((array).locked) { \
+ (void)munlock((array).data, (array).len * sizeof(*(array).data)); \
+ (array).locked = false; \
+ }
+