X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=test%2Fstress%2Fparallel%2Fparallel-misc%2Fmcslock_driver.cpp;fp=test%2Fstress%2Fparallel%2Fparallel-misc%2Fmcslock_driver.cpp;h=a4a9d1728a131e6a8757f7f66daa8925bd96e83b;hb=f7b18ec599eadb55ea2e8757ba12fcab12e9f708;hp=0000000000000000000000000000000000000000;hpb=6e082e4b12c3dff7c69d9e089fb3f33fc2395de5;p=libcds.git diff --git a/test/stress/parallel/parallel-misc/mcslock_driver.cpp b/test/stress/parallel/parallel-misc/mcslock_driver.cpp new file mode 100644 index 00000000..a4a9d172 --- /dev/null +++ b/test/stress/parallel/parallel-misc/mcslock_driver.cpp @@ -0,0 +1,45 @@ +#include "common.h" +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace std; + +namespace { + +static size_t s_nMCSLockThreadCount = 6; +static size_t s_nMCSLockPassCount = 3000000; + +class MCSLockTest : public cds_test::stress_fixture { +protected: + static ullong x; + + static void SetUpTestCase() { + cds_test::config const &cfg = get_config("SequentialMisc"); + GetConfig(MCSLockPassCount); + GetConfig(MCSLockThreadCount); + } +}; + +ullong MCSLockTest::x; + +TEST_F(MCSLockTest, MCSLock) { + cds_others::BackoffTraits::lower_bound = 16; + cds_others::BackoffTraits::upper_bound = 1024; + std::unique_ptr my_mutex(new cds_others::mcs_mutex()); + cds_others::mcs_mutex::guard g(my_mutex.get()); + my_mutex->unlock(&g); + for (size_t i = 0; i < s_nMCSLockPassCount; i++) { + my_mutex->lock(&g); + x++; + my_mutex->unlock(&g); + } + my_mutex->lock(&g); +} + +} // namespace