Pythonの35のシリアルデッドロックの問題と解決方法

まず、デッドロック

 

  1.  
インポートスレッディング

インポート時間
lock_1

 = threading.Lock()

lock_2 = threading.Lock()


DEF のFunc-1():

    印刷" のFunc-1開始...... " 

    lock_1.acquire() 私はlock_1にプリエンプション

    を印刷" のFunc-1は..... lock_1を提出した" 

    time.sleep( 2) は、これら2つの関数は、デッドロックを形成するように、ああ待たなければならない

    印刷" lock_2を待つ......のFunc-1 " 

    lock_2を。 ()を取得

    印刷"FUNC_1はlock_2適用" 

    lock_2.release()

    印刷" FUNC_1リリースlock_2 " 

    lock_1.release()

    印刷" FUNC_1リリースlock_1 " 


    を印刷" FUNC_1 DONE 


DEF :のFunc-2()

    印刷" のFunc-2見つめる...... " 

    lock_2.acquire() 私はlock_2にプリエンプション

    を印刷" のFunc-2が..... lock_2を提出した" 

    time.sleep( 4 

    印刷" のFunc-2 ....... lock_1を待つ" 

    lock_1.acquire()

    印刷" のFunc-2が..... lock_1を提出した" 

    lock_1.release()

    印刷" のFunc-2リリースlock_1 " 

    lock_2.release ()

    印刷" func_2放出lock_2 " 


    プリント" func_2 DONE " 


IF  __name__ == " __main__ " 

    T1 = threading.Thread(目標= FUNC_1の、引数= ())

    T2= threading.Thread(目標= func_2、引数= ())
    t1.start()
    t2.start()
    t1.join()
    t2.join()





2.ソリューション

私たちは、判決文を結合し、アプリケーションが直接行く適用されていないロックすることはできません

RST = lock_4.acquire内部注意(タイムアウト= -1)#これはこれは、戻り値はブール変数であるタイムアウトタイムアウト代わっジャンプであることを示しています

 

= lock_3 threading.Lockの()

lock_4 = threading.Lockの()


DEF func_3():

    印刷" func_3開始..... " 

    lock_3.acquire(タイムアウト = -1 

    を印刷func_3はlock_3を適用... ... " 

    time.sleep( 2 

    印刷" func_3 ....... lock_4を待っている
    RST

 = lock_4.acquire(タイムアウト= -1) 、これは戻り値はブール変数であることを示しています、タイムアウトタイムアウトは代わって飛び出す

    IF RST:

        印刷"ロックlock_4とfunc_3 " 

        lock_4.release()

        印刷" func_3リリースlock_4 " 

    

        印刷" func_3 lock_4には適用されない" 
    lock_3.release()



    印刷" func_3リリースlock_3 


    印刷" func_3はDONE ...... " 



DEFのfunc_4():

    印刷" func_4開始..... " 

    lock_4.acquire(タイムアウト = 4 

    印刷" func_4が..... lock_4を提出した" 

    time.sleep( 2 

    印刷" func_4 ....... lock_3を待つ" 
    RST

 = lock_3.acquire(タイムアウト= 2 

    IF RST:

        印刷" func_3は、ロックlock_3だ" 

        lock_3.release()

        印刷" func_4リリースlock_3を" 

    

        印刷" func_4 lock_3には適用されない" 
    lock_4.release()



    印刷" func_4释放了lock_4 " 


    プリント" func_4が行わ...... " 


場合 __name__ == " __main__ " 
    T3

 = threading.Thread(目標= func_3、引数= ())

    T4 =スレッド。スレッド(目標= func_4、引数= ())
    t3.start()
    t4.start()
    t3.join()
    t4.join()







 

紛争を解決するために、それはデッドロックを解決していませんが、それは十分だった、これはこの問題を回避する必要があります

第二に、ソース

d25_3_dead_lock.py

https://github.com/ruigege66/Python_learning/blob/master/d25_3_dead_lock.py

2.CSDNます。https://blog.csdn.net/weixin_44630050(西6月6月ムードが知らない - ルイを)

3.パークブログます。https://www.cnblogs.com/ruigege0000/

4.マイクロチャネル公共数に焦点を歓迎:フーリエ変換は、ビッグデータの学習教材を取得するには、舞台裏の返信「贈り物」を変換します

 

 

おすすめ

転載: www.cnblogs.com/ruigege0000/p/11462696.html
おすすめ