在并发编程中,通过使用锁,程序有时可能会使用超出必要数量的处理器?

问题描述 投票:0回答:2

这是一道考试题(模拟考试,不是真正的考试)。这是关于使用多核处理器的并发编程以及使用锁的问题。

在并发编程中,通过使用锁,程序有时可能会使用超出必要数量的处理器

换句话说,这可能吗?这是一个真/假问题。我在任何地方都找不到答案,我正在复习考试。

multithreading concurrency processor concurrent-processing
2个回答
0
投票

在任意时间点有 N 个使用锁执行线程的并发程序可以有

M=0 .. N-1
个线程等待锁;因此这个程序只能利用
N-M
处理器,因为等待锁不需要处理器。 因此,不,使用锁不会增加并发程序所需的处理器数量。


0
投票

通过多线程和锁的高效实现,如果线程阻塞等待锁很长一段时间,调度程序/锁实现将重新分配核心去做其他事情。

但是由于考试问题是询问是否“永远”可能使用比严格必要的数量更多的处理器,答案是这取决于线程/锁/调度的实现。例如,有一种称为自旋锁的锁,其中锁实现在等待获取锁时不会放弃对处理器的控制。相反,它会在紧密循环中轮询锁,试图获取它。 你为什么要这么做?那么,如果锁可能在足够短的时间内变得可用,那么在锁上“旋转”所浪费的 CPU 就会少于执行完整上下文切换所花费的 CPU。

所以我认为你的考试问题没有简单的是/否的答案。

© www.soinside.com 2019 - 2024. All rights reserved.