From 1fbfef2a51db4a3bac9d8a5b87af94a40a913b7a Mon Sep 17 00:00:00 2001 From: lichao <lichao@aiotlink.com> Date: 星期日, 25 四月 2021 15:33:40 +0800 Subject: [PATCH] change mqid from uuid to uint64. --- utest/api_test.cpp | 56 +++++++++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 49 insertions(+), 7 deletions(-) diff --git a/utest/api_test.cpp b/utest/api_test.cpp index a91db43..dd59b09 100644 --- a/utest/api_test.cpp +++ b/utest/api_test.cpp @@ -151,19 +151,61 @@ } st_.nlock_ += n; } - void unlock() { mutex_.unlock(); } + void unlock() + { + auto old_time = last_lock_time_.load(); + if (Now() - old_time > limit_) { + } else { + if (last_lock_time_.compare_exchange_strong(old_time, Now())) { + mutex_.unlock(); + } + } + } }; + +namespace +{ +typedef int64_t Offset; +Offset Addr(void *ptr) { return reinterpret_cast<Offset>(ptr); } +void *Ptr(const Offset offset) { return reinterpret_cast<void *>(offset); } +} // namespace + BOOST_AUTO_TEST_CASE(MutexTest) { - const std::string shm_name("ShmMutex"); - // ShmRemover auto_remove(shm_name); - SharedMemory shm(shm_name, 1024 * 1024 * 10); + SharedMemory &shm = TestShm(); + MsgI::BindShm(shm); + + void *base_ptr = shm.get_address(); + auto PrintPtr = [&](void *p) { + printf("addr: %ld, ptr: %p, offset: %ld\n", Addr(p), p, Addr(p) - Addr(base_ptr)); + }; + + printf("base"); + PrintPtr(base_ptr); + + MsgI msg; + msg.Make("string data"); + for (int i = 0; i < 10; ++i) { + int n = msg.AddRef(); + printf("add %d ref: %d\n", i, n); + } + for (int i = 0; i < 10; ++i) { + int n = msg.Release(); + printf("release %d, ref : %d\n", i, n); + } + std::this_thread::sleep_for(1s); + msg.Release(); const std::string mtx_name("test_mutex"); const std::string int_name("test_int"); - auto mtx = shm.find_or_construct<Mutex>(mtx_name.c_str())(3s); + auto mtx = shm.FindOrCreate<Mutex>(mtx_name); + auto pi = shm.FindOrCreate<int>(int_name, 100); - auto pi = shm.find_or_construct<int>(int_name.c_str())(100); + printf("mutetx "); + PrintPtr(mtx); + printf("int "); + PrintPtr(pi); + typedef std::chrono::steady_clock Clock; auto Now = []() { return Clock::now().time_since_epoch(); }; if (pi) { @@ -177,7 +219,7 @@ TLMutex mutex; // CasMutex mutex; auto Lock = [&]() { - for (int i = 0; i < 1000 * 100; ++i) { + for (int i = 0; i < 10; ++i) { mutex.lock(); mutex.unlock(); } -- Gitblit v1.8.0