为什么说锁违反了抽象和可组合性原则?

Sta*_*001 5 abstraction system-design locks

我没有在 Google 甚至 StackOverflow 上找到任何明确的答案来回答这个问题。

根据我的理解

  • 使用锁的线程会破坏抽象
  • 锁是不可组合的

但是锁如何以及为什么会破坏抽象和可组合性呢?

Cal*_*ays 2

我不是专家,我在网上也找不到任何东西。我可能正在大学做和你一样的课题,这就是我的想法(根据个人经验)。

\n\n

锁对抽象原理提出的问题是锁的状态及其资源可能无法由当前执行的指令集的状态确定。例如,在 C++ 中,您可能有一个 Baker 类,它需要对某个 Oven 对象进行互斥访问。面包师需要经常使用烤箱(打开/关闭/将东西放入里面),并且需要对烤箱进行独占访问才能这样做,但是这不能真正抽象,因为他何时需要这种互斥访问可能对其功能很重要。

\n\n

我们可能需要向我们的系统添加与面包师分开的功能,但需要对面包师正在使用的同一个烤箱进行互斥访问。在实现这些更改时,由于锁同时依赖于多个线程的状态,我们不能保证先前抽象的 Baker 类的行为在程序运行时保持不变。(例如:如果烤箱正被另一个线程使用,面包师可能会决定等待 30 分钟,然后再检查烤箱是否再次空闲,这可能是不需要的、低效的行为)。

\n\n

由于同样的问题,锁也违反了可组合性原则,因为如果程序的不同组件都相互依赖,则它们无法无缝组合\xe2\x80\x99在多线程应用程序中可能存在未定义的行为。

\n\n

希望有所帮助 - 让我知道您的想法,以便我们共同解决这个问题。

\n