diff --git a/_.cpp b/_.cpp new file mode 100644 index 0000000..5835823 --- /dev/null +++ b/_.cpp @@ -0,0 +1,24 @@ +#include +#include + + + +int main ( void ) +{try{ + + + return 0; +} +catch ( const std::exception& e ) +{ + std::cerr << std::endl + << "std::exception(\"" << e.what() << "\")." << std::endl; + return 2; +} +catch ( ... ) +{ + std::cerr << std::endl + << "unknown exception." << std::endl; + return 1; +}} + diff --git a/test_weak_memory.cpp b/test_weak_memory.cpp new file mode 100644 index 0000000..b14b95e --- /dev/null +++ b/test_weak_memory.cpp @@ -0,0 +1,59 @@ +#include +#include +#include +#include +#include + + + +int main ( void ) +{try{ + int shared = 0; + std::atomic flag; + + std::random_device rd; + std::default_random_engine el(rd()); + std::uniform_int_distribution ud(1,10); + + auto f = [&flag, &shared, &el, &ud](){ + + int count = 0; + while (count < 10000000) + { + volatile int busy_wait = ud(el)*100; + for ( ; busy_wait; --busy_wait ); + + int expected = 0; + if (flag.compare_exchange_strong(expected, 1, std::memory_order_relaxed)) + { + // Lock was successful + shared++; + flag.store(0, std::memory_order_relaxed); + count++; + } + } + }; + + std::thread t1( f ); + std::thread t2( f ); + + t1.join(); + t2.join(); + + std::cout << "shared = " << shared << std::endl; + + return 0; +} +catch ( const std::exception& e ) +{ + std::cerr << std::endl + << "std::exception(\"" << e.what() << "\")." << std::endl; + return 2; +} +catch ( ... ) +{ + std::cerr << std::endl + << "unknown exception." << std::endl; + return 1; +}} +