첫째, 교착 상태
- 예
가져 오기 스레딩 가져 오기 시간 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) #은 이 두 가지 기능이 교착 형성하도록, 아 기다릴 필요가 인쇄 ( " Func을-1 ...... lock_2 기다려 " ) 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. 마이크로 채널 공공 숫자에 초점을 환영합니다 : 푸리에 빅 데이터 학습 자료를 얻기 위해, 무대 응답 "선물"을 변환