考虑在专用服务器上运行最佳线程计数的程序,因此如果一个线程被锁定,则没有其他(几乎)等待CPU时间。在这种情况下,旋转锁在所有可能的情况下都能提供比互斥锁更好的性能吗?
[EDIT]一些解释:由于线程之间没有争用CPU时间,线程可以使用自旋锁,而不会对其他线程性能产生任何影响。和自旋锁不会切换到足够重的等待模式(至少在Windows上,idk如何在linux上执行)
答案 0 :(得分:1)
你的前提不太现实。也许你的进程拥有最佳线程数,其余的操作系统有数百个其他线程。其中一些可能已准备好运行,并且当您的线程产生时很乐意抓住CPU核心。此外,如果线程即将被阻塞,则很可能由于进程中其他线程之一持有锁而发生。哪个可能会在旋转等待时间内释放它。线程数与此无关。因此旋转等待仍然有意义。
答案 1 :(得分:0)
我认为在这种情况下spinlock会更好用,除非你试图优化你的代码并且它取决于I / O等的不同时间,否则不需要互斥锁...你也对等待做了一个很好的观点模式。
答案 2 :(得分:0)
Spinlock可能会更优,因为没有转换到内核。但这种情况是如此做作,我建议永远不要试图将其应用于现实代码。