#include <semaphore.h>
#include <thread>
-#include <gtest/gtest.h>
-
#include <folly/Benchmark.h>
#include <folly/Random.h>
+#include <folly/portability/Asm.h>
#include <folly/portability/GFlags.h>
+#include <folly/portability/GTest.h>
#include <folly/test/DeterministicSchedule.h>
using namespace folly;
LifoSem sem;
for (size_t n = 0; n < iters; ++n) {
sem.post();
- asm volatile ("":::"memory");
+ asm_volatile_memory();
}
}
LifoSem sem(iters);
for (size_t n = 0; n < iters; ++n) {
sem.wait();
- asm volatile ("":::"memory");
+ asm_volatile_memory();
}
}
LifoSem sem;
for (size_t n = 0; n < iters; ++n) {
sem.post();
- asm volatile ("":::"memory");
+ asm_volatile_memory();
sem.wait();
- asm volatile ("":::"memory");
+ asm_volatile_memory();
}
}
LifoSem sem;
for (size_t n = 0; n < iters; ++n) {
EXPECT_FALSE(sem.tryWait());
- asm volatile ("":::"memory");
+ asm_volatile_memory();
}
}
EXPECT_EQ(sem_destroy(&sem), 0);
}
-static void contendedUse(uint n, int posters, int waiters) {
+static void contendedUse(uint32_t n, int posters, int waiters) {
LifoSemImpl<std::atomic> sem;
std::vector<std::thread> threads;
BENCHMARK_SUSPEND {
for (int t = 0; t < waiters; ++t) {
threads.emplace_back([=,&sem] {
- for (uint i = t; i < n; i += waiters) {
+ for (uint32_t i = t; i < n; i += waiters) {
sem.wait();
}
});
while (!go.load()) {
std::this_thread::yield();
}
- for (uint i = t; i < n; i += posters) {
+ for (uint32_t i = t; i < n; i += posters) {
sem.post();
}
});