mirror of
https://github.com/libretro/cpp-cheat.git
synced 2025-04-12 08:14:07 +00:00
38 lines
840 B
C++
38 lines
840 B
C++
/*
|
|
# atomic
|
|
|
|
More restricted than mutex as it can only protect a few operations on integers.
|
|
|
|
But if that is the use case, may be more efficient.
|
|
|
|
On GCC 4.8 x86-64, using atomic is a huge peformance improvement
|
|
over the same program with mutexes (5x).
|
|
*/
|
|
|
|
#include "common.hpp"
|
|
|
|
#if __cplusplus >= 201103L
|
|
|
|
std::atomic_long global(0);
|
|
|
|
void threadMain() {
|
|
for (int i = 0; i < NUM_ITERS; ++i) {
|
|
global++;
|
|
}
|
|
}
|
|
#endif
|
|
|
|
int main() {
|
|
#if __cplusplus >= 201103L
|
|
std::thread threads[NUM_THREADS];
|
|
int i;
|
|
for (i = 0; i < NUM_THREADS; ++i)
|
|
threads[i] = std::thread(threadMain);
|
|
for (i = 0; i < NUM_THREADS; ++i)
|
|
threads[i].join();
|
|
assert(global.load() == NUM_THREADS * NUM_ITERS);
|
|
// Same as above through `operator T`.
|
|
assert(global == NUM_THREADS * NUM_ITERS);
|
|
#endif
|
|
}
|