1. 程式人生 > 實用技巧 >【Python高階程式設計023 ● 網路程式設計 ● TCP客戶端程式開發】

【Python高階程式設計023 ● 網路程式設計 ● TCP客戶端程式開發】


---------Python基礎程式設計---------

Author : AI菌


【內容講解】

1.死鎖的概念: 一直等待對方釋放鎖的情景就是死鎖。
2.死鎖的危害:死鎖一旦產生就會造成應用程式的停止響應,應用程式無法再繼續往下執行了。
3.解決死鎖的方法:使用互斥鎖的時候需要注意死鎖的問題,要在合適的地方注意釋放鎖。

【程式碼演示】

"""
1.死鎖的概念: 一直等待對方釋放鎖的情景就是死鎖。
2.死鎖的危害:死鎖一旦產生就會造成應用程式的停止響應,應用程式無法再繼續往下執行了。
3.解決死鎖的方法:使用互斥鎖的時候需要注意死鎖的問題,要在合適的地方注意釋放鎖。
"""

import threading

# 建立互斥鎖
lock = threading.Lock()


# 保證同一時刻只有一個執行緒根據下標去取值
def get_value(index):
    # 取值之前先上鎖
    lock.acquire()
    my_list = [0, 1, 2]

    # 判斷下標是否越界
    if index >= len(my_list):
        print("下標越界:", index)
        # 下標越界不能取值,也需要把鎖釋放,保證後面的執行緒可以再次取值
        # 如果執行緒一直不釋放鎖,其他執行緒就一直等待,形成死鎖,程式就無法往下繼續執行
        lock.release()
        # 如果下標越界,直接結束函式get_value
        return

    # 根據下標獲取值
    result = my_list[index]
    print(result)

    # 取值完成需要釋放鎖
    lock.release()


if __name__ == '__main__':
    # 建立很多執行緒,同時執行某個任務
    for i in range(5):
        # 建立子執行緒
        sub_thread = threading.Thread(target=get_value, args=(i,))
        # 啟動執行緒執行任務
        sub_thread.start()

【執行結果】

0
1
2
下標越界: 3
下標越界: 4

【往期精彩】

▷【Python基礎程式設計196 ● 讀取檔案的4種方式】
▷【Python基礎程式設計197 ● 讀取檔案的4種方式】
▷【Python基礎程式設計198 ● 讀取檔案的4種方式】
▷【Python基礎程式設計199 ● Python怎麼讀/寫很大的檔案】
▷【Python基礎程式設計200 ● 讀取檔案的4種方式】
▷【Python基礎程式設計201 ● 讀取檔案的4種方式】
▷【Python基礎程式設計202 ● 讀取檔案的4種方式】
▷【Python基礎程式設計203 ● 讀取檔案的4種方式】

【加群交流】