29 struct DummyPageCreator {
40 static void* create() {
41 auto ptr = mmap(
nullptr, 1, PROT_READ, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
46 auto r = mlock(
ptr, 1);
56 DummyPageCreator dummyPageCreator;
58 void mprotectMembarrier() {
59 auto dummyPage = dummyPageCreator.get();
63 static Indestructible<std::mutex> mprotectMutex;
64 std::lock_guard<std::mutex> lg(*mprotectMutex);
70 r = mprotect(dummyPage, 1, PROT_READ | PROT_WRITE);
74 *
static_cast<char*
>(dummyPage) = 0;
78 r = mprotect(dummyPage, 1, PROT_READ);
94 std::atomic_thread_fence(std::memory_order_seq_cst);
void asymmetricHeavyBarrier(AMBFlags flags)
—— Concurrent Priority Queue Implementation ——
bool sysMembarrierAvailable()
void checkUnixError(ssize_t ret, Args &&...args)