lichao
2021-04-23 02ba913dc7bb5d711471b27f2ea23a897d0f2e28
utest/api_test.cpp
@@ -153,17 +153,50 @@
   }
   void unlock() { 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.find_or_construct<Mutex>(mtx_name.c_str())();
   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) {