gpt4 book ai didi

c++ - Boost 是否支持 Windows EnterCriticalSection API?

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

我知道 Boost 支持互斥锁和 lock_guard,可用于实现临界区。

但是 Windows 有一个用于关键部分的特殊 API(参见 EnterCriticalSectionLeaveCriticalSection),它比互斥锁快很多(对于很少竞争的短代码部分)。

因此我的问题 - 在 Boost 中可以利用这个 API,并回退到其他平台上基于自旋锁/互斥/futex 的实现吗?

最佳答案

简单的答案是否定的。

这里有一些相关背景 from an old mailing list thread:

BTW. I am agree that mutex is more universal solution from a

performance point of view. But to be fair - CS are faster in simple design. I believe that possibility to support them should be at least taken in account.

这是有人指给我看的文章。结论是 CS 只有在以下情况下才会更快:

  • 进程中的线程总数少于 8 个。
  • 您没有在后台运行。
  • 您使用的不是双处理器计算机。

对我来说,这意味着简单的测试可以产生良好的 CS 性能 结果,但是任何真实世界的程序都最好有一个完整的 互斥体。

我并不反对支持 CS 实现。但是,我 最初选择不这样做的原因如下:

  • 您可以通过使用 PIMPL 获得构建和破坏命中 习惯用法或者您必须在 Boost.Threads header 中包含 Windows.h, 我根本不想这样做。 (这可以解决 从 MSDN 模拟 CS ala OPTEX。)
  • 根据这篇研究论文,大多数项目不会受益于 CS 设计。
  • 编写一个(不可移植的)critical_section 类是很简单的 如果您真的可以使用它,请遵循互斥模型。

现在我认为我做出了正确的选择,尽管在未来的道路上我们 可能会更改实现以使用关键部分或 OPTEX。

比尔·肯普夫

关于c++ - Boost 是否支持 Windows EnterCriticalSection API?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34710562/

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