gpt4 book ai didi

c++ - 为什么 Win32 mutex 这么耗时

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

我一直在通过 C/C++ 阅读 Windows 的书。在第 8 章第 215 页,作者比较了各种同步机制的性能。而且我发现互斥锁的性能很差。当 4 个线程同时运行时,它花费了超过 23 秒 用于互斥锁同步。

为什么 Win32 mutex 这么耗时?我们什么时候可以使用互斥体?

PS:我把测试代码贴在了GitHub:https://gist.github.com/985198

感谢您的回复。

最佳答案

Win32 中的互斥量是一个内核对象,这意味着每次使用它(WaitRelease)都需要一个系统调用来切换到内核模式并返回到用户模式模式。另外,如果您的线程实际上必须等待互斥锁,它就会失去它的时间片,而另一个可以运行的线程会在 CPU 上调度。在 WinXP 和更早版本(可能还有某些更高版本的 Windows)上,互斥量是“公平的”,这意味着如果您的线程最后一个等待互斥量,那么它将是最后一个接收它的线程,进一步增加了争用的可能性。

使用互斥量的原因是您可以轻松地在进程之间共享它们,当拥有它的线程被终止时您可以得到通知,并且您可以使用 WaitForMultipleObjects 与其他对象一起等待它们.

请注意,您在此基准测试中使用它们不是理想的使用方式,因为仅获取互斥量的开销远远超过您正在做的工作量。 p>

关于c++ - 为什么 Win32 mutex 这么耗时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6086207/

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