2017-11-11 93 views
1

我沒有找到谷歌或甚至StackOverflow回答這個問題的任何明確的答案。爲什麼鎖被認爲違反了抽象和可組合性的原則?

從我的理解是,使用鎖可以打破抽象

    • 線程是不是組合的

    但如何和爲什麼鎖斷抽象和組合性?

  • +0

    從我的理解... 鎖不構成。可組合的系統應提供可按任意順序選擇和組裝的組件,以滿足特定要求。 –

    +0

    希望有經驗和/或系統設計和並行性通過線程理解的人可以爲我解答。 –

    +0

    也許這有助於:我認爲鎖是單身人士,所以也許查找單身人士模式可以給你答案。 – aschoerk

    回答

    1

    我不是專家,我在網上也找不到任何東西。我可能會和你一樣在uni上做同樣的話題,這就是我想出的(從個人經歷來講)。

    問題鎖構成抽象的原則是鎖的狀態及其資源可能無法由當前執行的指令集的狀態確定。例如,在C++中,你可以有一個Baker類,它需要對一些Oven對象進行互斥訪問。貝克需要經常使用烤箱(打開/關閉/放入東西),並且需要獨家使用烤箱才能這樣做,但是這並不是真正的抽象,因爲當他需要這種相互獨佔的訪問可能與他的功能有關時。

    我們可能需要爲我們的系統添加與貝克獨立的功能,但需要對面包師使用的相同烤箱進行互斥訪問。在實現這些更改時,由於鎖定依賴於多個線程的狀態,我們不能保證先前抽象的Baker類的行爲在我們的程序運行時保持不變。 (EG:如果烤箱正在被另一個線程使用,麪包師可能會決定等待30分鐘,然後再檢查烤箱是否再次釋放,這可能是不必要的,低效的行爲)。

    由於相同的問題,鎖也違反了可組合性的原則,因爲如果程序的不同組件都依賴於多線程應用程序中彼此可能未定義的行爲,則不能無縫組合。

    希望有幫助 - 讓我知道你的想法,這樣我們就可以一起成長。

    +0

    是的,我相當肯定我們都在做CAB401:P我今天剛剛和幾個人討論過,得出了同樣的結論。抽象是一個非常有趣的討論。感謝芽。 :) –

    相關問題