mutex, incNumber는 global 안붙여도 되는건가요?
115
3 asked
Re-entrancy를 만족하는 Thread 예제 구현 Part2 를 듣는중에 갑자기 mutex, incNumber는 global 안붙여도 제대로 동작하길래 무슨 원리일까요?
Answer 2
1
global 없이도 잘 동작하는 경우가 있다?
네, 이건 두 가지 이유 중 하나 때문입니다:
① 이미 global이 코드에 명시되어 있다
→ 예제 소스코드상에 global numUsed가 Producer와 Consumer 둘 다에 들어 있습니다.
global numUsed
위의 코드가 이미 선언되어 있음
그래서 당연히 에러 없이 잘 동작합니다.
만약 이걸 빼면 어떻게 될까요?
② global을 빼면 실제로 에러가 발생한다
예를 들어 아래처럼 Producer에서 global numUsed를 뺐다고 가정하면:
class Producer(QThread):
def run(self):
for i in range(10):
time.sleep(1)
mutex.lock()
numUsed += 1 # ⚠ 여기가 에러 발생
incNumber.wakeAll()
mutex.unlock()
실행하면 아래와 같은 에러가 뜹니다:
UnboundLocalError: cannot access local variable 'numUsed' where it is not associated with a value
즉, 정상적인 Python 동작에서는 반드시 global numUsed가 필요합니다.
혹시 더 궁금한게 있으면 언제든 질문해 주세요.
감사합니다. 김대진 드림.
1
안녕하세요, 인프런 AI 인턴입니다. padohy님.
Qt 관련 강의를 수강하시면서 쓰레드 및 동기화 문제와 관련하여 궁금한 점이 있으시군요. mutex와 incNumber가 전역 변수로 선언되지 않았는데도 올바르게 작동하는 이유에 대해 설명드리겠습니다.
Python에서 변수를 전역적으로 사용하고자 할 때 global 키워드를 사용하는데, 이는 함수 내에서 전역 변수를 수정할 필요가 있을 때 주로 사용됩니다. 그러나 mutex와 incNumber의 경우, 일반적으로 해당 변수가 함수 바깥에서 이미 정의된 상태라면, 읽기 전용으로 사용할 때 global 키워드를 사용하지 않아도 됩니다.
Global 변수 접근: 어떤 변수든 함수 밖에서 초기화되고 읽기만 하는 경우에는 자동으로 그 변수를 가져와서 사용할 수 있습니다. 즉, 읽기 전용으로 변수를 사용하는 경우에는
global키워드가 필요하지 않습니다.Global 변수 수정: 반면, 함수 내에서 전역 변수를 수정해야 할 경우에만
global키워드가 필요합니다. 만약 함수 내에서mutex나incNumber를 수정하고 있다면, 이 경우에global을 명시해야 합니다.
관련 내용의 예시나 코드 포맷에 대한 설명은 Qt 프로그래밍 환경을 설정할 때 공통으로 나타날 수 있는 상황입니다.
유사한 질문과 관련된 이전 답변들이 도움이 될 수 있습니다:
- Re-entrancy를 만족하는 Thread 예제 구현: 이 질문에서는 쓰레드 간의 동기화 문제와 관련된 예제를 다루며, 특히 변수의 전역성 및 동기화 메커니즘에 대한 이해를 도울 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
6-6
0
5
0
작업형 1 유형 부분
0
10
1
수강평 이벤트
0
17
2
작업형 1 (삭제예정, 구 버전)
0
30
2
강의노트는 어디있나요?
0
17
1
노션 학습 자료 권한 요청
0
17
1
수강기간 연장 문의드립니다.
0
21
1
2유형 레이블 인코딩 VS 원핫 인코딩
0
24
3
part2강의 문의사항입니다.
0
19
2
수강기간 연장 문의드립니다.
0
26
1
인덱스 슬라이싱
0
27
2
코드를 첨부해야하는 이유가 있나요?
0
20
2
QT와 QT Designer에 대한 질문 사항
1
167
2
Qt Resource를 사용하는 예제 구현 10:15 구간 질의
1
140
2
데코레이터 @Slot을 꼭 써줘야 하는 건가요?
1
150
2
TableModel(QAbstractTableModel) 에서 질문입니다.
1
242
2
self가 있는 거와 없는 버튼
1
119
2
선호하는 GUI 개발 방법이 있으신가요
1
304
2
가장 큰 위젯의 너비와 같은 너비를 차지하는 2열 짜리 컬럼
1
228
2
exe 배포 시 .ui 파일 처리하는 권장하는 방법이 있나요?
1
306
1
클래스 __init__(self) 설정에서 이해가 안 되는 부분이 있습니다.
2
300
2
pyqt? pysie6? 차이점이 있을까요?
1
1316
2
자주 사용하는 Layout 살펴보기
1
151
2
강의 pdf파일 올려 주시면 안될까요?
2
236
2

