我们有一些在 Windows 上跨进程共享的数据结构。 (通过所有这些进程加载的 DLL 中的共享数据段。)
我们需要同步一些访问,我们测量到使用 Win32 Mutex 的性能损失太高。
CRITICAL_SECTION
cannot由于它的某些高级功能而被放入共享内存。
这让我们需要一个简单的锁定/互斥解决方案,直接基于 Win32 上的 Interlocked*
函数系列。
在我自己动手之前,我想看看是否有强大的实现可以满足轻量级、快速和在多个进程的共享内存中工作的要求,但似乎这有点难以谷歌为了我。 (而且,无论如何,CodeProject 成功了,通常很难判断它是玩具代码还是“健壮的”。)
所以我需要的可能被称为用户模式递归互斥锁,当放在 Windows 上的共享内存中时,它适用于多个进程(请注意,只有锁定部分需要妥善处理,我可以忍受初始化的限制/额外要求)。
最佳答案
共享内存是目前比较热门的话题,
尝试 boost::InterProcess - 它提供了可以使用的机制并利用通用代码 x 平台。
http://www.boost.org/doc/libs/1_52_0/doc/html/interprocess/sharedmemorybetweenprocesses.html
另一个原因是该库提供了同步机制和其他将来可能有用的 IPC 机制。
http://www.boost.org/doc/libs/1_52_0/doc/html/interprocess/synchronization_mechanisms.html
作为引用,这个东西也使用 Atomic OP 作为互斥锁:
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);
}
也可以从“下面的聊天”这篇文章中查看以下的最佳答案: Is there a difference between Boost's scoped mutex and WinAPi's critical section?
关于c++ - 共享内存的强大 CRITCAL_SECTION?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13532189/