gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 04:45:09 24 4
gpt4 key购买 nike

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

根据我的理解

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

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

    最佳答案

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

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

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

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

    希望有帮助 - 让我知道你的想法,这样我们就可以一起解决这个问题。

    关于abstraction - 为什么说锁违反了抽象和可组合性原则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47234982/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com