- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
请注意,我可以在 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/
我正在尝试将 interprocess_mutex 与 managed_windows_shared_memory 一起使用。在我的项目中,多个进程在以下代码中创建了一个 class A 的实例。 u
我正在开发一个项目,它到处都使用 boost::interprocess_mutexes,即使该应用程序甚至从来没有 fork() 的子级,但严重依赖关于多线程。 假设所有这些 interproces
我的场景:一台服务器和一些客户端(虽然不多)。服务器一次只能响应一个客户端,因此他们必须排队。我正在使用互斥量 (boost::interprocess::interprocess_mutex) 来执
请注意,我可以在 boost 源代码中进行研究,如果没有人提供答案,我可能会这样做来回答我自己的好奇心。 但是我确实会问,因为也许有人已经做过这种比较并且可以权威地回答? 似乎在进程之间创建一个共享内
在愤怒中学习和使用增强共享内存一段时间后,我得出了一个心智模型,即何时使用哪种类型的互斥体,看起来像这样: class IntendedToResideInProcessMemory { bo
我是一名优秀的程序员,十分优秀!