2017-11-11 95 views
1

我没有找到谷歌或甚至StackOverflow回答这个问题的任何明确的答案。为什么锁被认为违反了抽象和可组合性的原则?

从我的理解是,使用锁可以打破抽象

    • 线程是不是组合的

    但如何和为什么锁断抽象和组合性?

  • +0

    从我的理解... 锁不构成。可组合的系统应提供可按任意顺序选择和组装的组件,以满足特定要求。 –

    +0

    希望有经验和/或系统设计和并行性通过线程理解的人可以为我解答。 –

    +0

    也许这有助于:我认为锁是单身人士,所以也许查找单身人士模式可以给你答案。 – aschoerk

    回答

    1

    我不是专家,我在网上也找不到任何东西。我可能会和你一样在uni上做同样的话题,这就是我想出的(从个人经历来讲)。

    问题锁构成抽象的原则是锁的状态及其资源可能无法由当前执行的指令集的状态确定。例如,在C++中,你可以有一个Baker类,它需要对一些Oven对象进行互斥访问。贝克需要经常使用烤箱(打开/关闭/放入东西),并且需要独家使用烤箱才能这样做,但是这并不是真正的抽象,因为当他需要这种相互独占的访问可能与他的功能有关时。

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

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

    希望有帮助 - 让我知道你的想法,这样我们就可以一起成长。

    +0

    是的,我相当肯定我们都在做CAB401:P我今天刚刚和几个人讨论过,得出了同样的结论。抽象是一个非常有趣的讨论。感谢芽。 :) –

    相关问题