1

考虑一个在专用服务器上运行的具有最佳线程数的程序,因此如果一个线程被锁定,则没有其他线程(几乎)在等待 CPU 时间。在这种情况下,在所有可能的情况下,自旋锁是否提供比互斥锁更好的性能?

[编辑] 一些解释:由于线程之间没有 CPU 时间争用,线程可以使用自旋锁,而不会对其他线程性能产生任何影响。并且自旋锁不会切换到可能足够重的等待模式(至少在 Windows 上,idk 它在 linux 上的执行方式)

4

3 回答 3

1

你的前提不太现实。也许您的进程具有最佳线程数,而操作系统的其余线程有数百个其他线程。其中一些可能已经准备好运行,并且当你的线程屈服时会很高兴地抓住一个 CPU 内核。此外,如果线程即将被阻塞,则很可能由于进程中的其他线程之一持有锁而发生。这可能会在旋转等待时间内释放它。线程数与此无关。因此,旋转等待仍然有意义。

于 2011-01-14T18:32:40.797 回答
0

我认为在这种情况下自旋锁会更好地工作,除非您尝试优化代码并且它取决于 I/O 等的不同时间,否则并不真正需要互斥锁......您还对等待模式提出了一个很好的观点。

于 2011-01-14T18:12:52.710 回答
0

自旋锁可能会更优化,因为没有过渡到内核。但是这个场景太人为了,我建议永远不要尝试将它应用于现实生活中的代码。

于 2011-01-14T18:41:33.057 回答