잠금
목록 및 사전과 같은 Python의 내장 데이터 구조는 스레드로부터 안전하지만 정수 및 부동 소수점 숫자와 같은 간단한 데이터 유형은 스레드로부터 안전하지 않습니다. 이러한 간단한 데이터 유형을 작동하려면 잠금을 사용해야 합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
|
실행 결과:
1 |
|
1 2 |
|
또 다른 예:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
|
실행 결과:
1 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
|
acquire()에 False 값을 전달하면 잠금 획득 여부를 확인할 수 있습니다. 예:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
|
실행 결과:
1 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
스레드 안전 잠금
1 |
|
재진입 잠금 객체를 반환합니다. 재진입 잠금은 이를 획득한 스레드에 의해 해제되어야 합니다. 스레드가 재진입 잠금을 획득하면 동일한 스레드가 차단 없이 다시 잠금을 획득할 수 있으며 획득 후에는 해제되어야 합니다.
일반적으로 스레드는 잠금을 한 번만 획득할 수 있습니다.
1 2 3 4 5 6 |
|
실행 결과:
1 |
|
1 2 |
|
RLock을 사용하여 여러 잠금을 얻으세요:
1 2 3 4 |
|
실행 결과:
1 |
|
1 2 |
|
또 다른 예를 살펴보겠습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
|
실행 결과:
1 |
|
1 2 3 4 5 6 7 8 9 10 11 12 |
|