銀行家算法(banker's algorithm)是一種資源分配算法,在操作系統理論中它是一個避免死鎖的算法,是以銀行借貸系統的分配策略為基礎,保證資源高效可分配的運行。
銀行系統中,常常會涉及貸款業務。在理想的狀態下,每個客戶在申請貸款時都需要注明需要申請資金的最大額,銀行盡可能滿足客戶的需求。當借用期限到后,客戶應當及時歸還所有資金,這個過程很類似于銀行發放信用卡,當銀行發行總價值2000萬元的信用卡時,并不意味著銀行一定有2000萬元現金分配到每張卡中。
例如,某銀行有A、B、C、D四種貨幣,有四位客戶分別需要借該四種貨幣,且數量不等,在某一時刻借款狀態見下表:

根據上表,可以通過每位客戶的需求總量,以及已經借款的量計算出每位客戶當前時刻還分別缺少的A,B,C,D 四種貨幣量,見下表

在計算出剩余需求量之后,銀行需要對資金進行安全狀態審查,保證可以有效地繼續滿足客戶的需求。安全審查的方式是比較所有客戶的各自剩余需求量是否超過銀行當前剩余資金的情況,如果銀行的剩余資金無法滿足任何一位客戶的剩余需求,則銀行的資金意味著進入不安全狀態。如果能夠滿足某位客戶的剩余需求,則假設將銀行的剩余資金借給該客戶,當該客戶資金到位后即使用完畢,則歸還全部借款,這些借款則成為銀行的剩余資金,然后重新開始檢查銀行剩余資金是否滿足其他客戶,不斷迭代上述過程,直到最后所有客戶都能借到錢并且都順利還錢,則銀行是安全狀態。
例如,上圖中,客戶乙的剩余需求量小于銀行的剩余資金,因此銀行可以將剩余資金借給客戶乙。當客戶乙資金使用完畢之后,客戶乙的所有資金將全部歸還銀行。銀行將利用該部分資金向客戶甲、乙、丁繼續借款。
銀行家算法的核心點在于數據分配之后的數據安全檢查,這是一個有效算法的重要思想之一。銀行家算法實質是一種在操作系統中避免死鎖的算法,這里的資金可以理解為系統操作資源,客戶可以理解為申請資源的進程。