这是一道考试题(练习题,不是真题)。它是关于使用多核处理器的并发编程以及使用锁的问题。
“在并发编程中,是否有可能通过使用锁,一个程序有时可能会使用比必要更多的处理器?”
换句话说,这有可能吗?这是一个真/假问题。我在任何地方都找不到答案,我正在为我的考试复习。
这是一道考试题(练习题,不是真题)。它是关于使用多核处理器的并发编程以及使用锁的问题。
“在并发编程中,是否有可能通过使用锁,一个程序有时可能会使用比必要更多的处理器?”
换句话说,这有可能吗?这是一个真/假问题。我在任何地方都找不到答案,我正在为我的考试复习。
N个线程在任意时刻使用锁执行的并发程序都可以有M=0 .. N-1
线程等待锁;因此这个程序只能使用N-M
处理器,因为等待锁不需要处理器。因此,不,使用锁不会增加并发程序所需的处理器数量。
通过多线程和锁的高效实现,如果线程阻塞等待锁的时间很长,调度程序/锁实现将重新分配核心以执行其他操作。
但是由于考试问题是询问是否有可能使用比严格必要更多的处理器,答案是它取决于线程/锁/调度的实现。例如,有一种称为自旋锁的锁,其中锁实现在等待获取锁时不会放弃对处理器的控制。相反,它会在一个紧密的循环中轮询锁,试图获取它。
为什么要这么做?好吧,如果锁很可能在足够短的时间内变得可用,那么 CPU 在锁上“旋转”所浪费的时间少于执行完整上下文切换所花费的时间。
所以我不认为你的考试问题有一个简单的是/否答案。