在網上看到一個有意思的小問題,就copy過來自己想辦法看看能否解決
題目:
某銀行有至多三個窗口提供服務。
該銀行每天至多服務100人次;
初始時,只有一個窗口開放,如果等待人數超過兩人(包含正在辦理業務的人),纔開放下一個窗口。
需要考慮的問題如下
這個小小的問題裏面包含幾個關鍵點:
顯然三個窗口可以用三個線程來做,那麼如何得到三個線程服務的總人數?涉及到多線程數據同步問題。
100人次可能不是一次來的。有可能分幾次來,那麼某一個或幾個窗口會處於等待狀態,涉及到線程等待和喚醒問題。
初始並不是一次出來三個窗口,而是根據隊列中等待人數多少。那麼考慮到擴展性,我要增加到四個或N個窗口呢?涉及到動態創建線程問題。
當服務總人數達到100人次,不可能直接讓三個窗口結束任務,總得讓人家把業務辦完吧?涉及到多線程之間等待問題。
當服務總人數達到100人次,並且三個窗口都結束了任務,如何關閉所有線程?