强大的CRITCAL_SECTION共享内存?

Mar*_* Ba 7 c++ mutex shared-memory critical-section visual-c++

我们有一些数据结构,我们在Windows上的进程之间共享.(通过所有这些进程加载的DLL中的共享数据段.)

我们需要同步一些访问,我们测量使用Win32 Mutex的性能损失太高.

CRITICAL_SECTION 由于它的一些高级功能,不能放入共享内存.

这使得我们需要一个简单的锁定/互斥解决方案,该解决方案直接Interlocked*基于Win32 上的函数族.

在我自己开始之前,我想看看是否有强大的实现可以满足轻量级,快速和在多个进程的共享内存中工作的要求,但似乎这对我来说有点难以谷歌.(而且,无论如何,CodeProject打击了,通常很难判断它是玩具代码还是"强大".)

所以我需要的东西可能被称为用户模式递归互斥体,当放在Windows上的共享内存中时,它适用于多个进程(请注意,只有锁定部分需要保存,我可以忍受限制/附加要求初始化).

Car*_*bou 1

共享内存是当前的一个热门话题,

尝试 boost::InterProcess - 它提供了可以使用的机制,并利用 x 平台的通用代码。

http://www.boost.org/doc/libs/1_52_0/doc/html/interprocess/sharedmemory Betweenprocesses.html

另一个原因是该库提供了同步机制和其他将来可能有用的 IPC 机制。

http://www.boost.org/doc/libs/1_52_0/doc/html/interprocess/synchronization_mechanisms.html

作为参考,该事物也使用原子操作作为互斥体:

http://www.boost.org/doc/libs/1_52_0/boost/interprocess/sync/spin/mutex.hpp

inline void spin_mutex::lock(void)
{
   do{
      boost::uint32_t prev_s = ipcdetail::atomic_cas32(const_cast<boost::uint32_t*>(&m_s), 1, 0);

      if (m_s == 1 && prev_s == 0){
            break;
      }
      // relinquish current timeslice
      ipcdetail::thread_yield();
   }while (true);
}
Run Code Online (Sandbox Code Playgroud)

另外,从这篇文章的“下面的聊天”中可以看到以下问题的最佳答案: Does a Difference Between Boost'sscoped mutex and WinAPi's Criticalsection?