gpt4 book ai didi

c++ - boost::interprocess_mutex 与 Win32 native 互斥锁的性能如何?

转载 作者:可可西里 更新时间:2023-11-01 09:22:31 29 4
gpt4 key购买 nike

请注意,我可以在 boost 源代码中进行研究,如果没有人提供答案,我可能会这样做来回答我自己的好奇心。

但是我确实会问,因为也许有人已经做过这种比较并且可以权威地回答?

似乎在进程之间创建一个共享内存映射文件,并通过使用 InterlockedIncrement() 构造,可以创建一个类似于 CRITICAL_SECTION 的主要用户模式互斥体,它在进程间同步方面比 Win32 Mutex 性能要好得多。

所以我的期望是,boost::interprocess_mutex 的 Win32 实现可能会以这种方式实现,并且比本地 API 产品快得多。

不过我只是有一个假设,我不知道通过现场测试boost::interprocess_mutex 的性能对于进程间同步有什么影响,或者深入研究它的实现。

有没有人有使用它或分析其相对性能的经验,或者他们可以评论使用共享内存跨进程使用 InterlockedIncrement() 的安全性?

最佳答案

在 boost 1.39.0 中,只有对 pthreads 的特定支持。在所有其他平台上,它变成一个忙循环,中间有一个 yield 调用(基本上与您描述的系统相同)。请参见 boost/interprocess/sync/emulation/interprocess_mutex.hpp。例如,这里是 lock() 的实现:

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

if (m_s == 1 && prev_s == 0){
break;
}
// relinquish current timeslice
detail::thread_yield();
}while (true);
}

这意味着在 Windows 上有竞争的 boost::interprocess::mutex 非常昂贵——尽管无竞争的情况几乎是免费的。这可能会通过添加一个事件对象或类似于 sleep on 来改进,但这不太适合 boost::interprocess 的 API,因为没有地方可以放置访问互斥锁所需的每个进程的 HANDLE。

关于c++ - boost::interprocess_mutex 与 Win32 native 互斥锁的性能如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1166316/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com