kangtegong/self-learning-cs

뮤텍스락을 적용하기전의 C코드를 파이썬으로 변환 가능할까요?

Closed this issue · 1 comments

안녕하세요, 뮤텍스락을 적용하기 전의 다음 코드를 파이썬으로 바꿀 수 있을까요?

 01 #include <stdio.h>
 02 #include <pthread.h>
 03
 04 #define NUM_THREADS 4
 05
 06 int shared = 0;
 07
 08 void *foo()
 09 {
 10     for (int i = 0; i < 10000; ++i) {
 11         shared += 1;
 12     }
 13     return NULL;
 14 }
 15
 16 int main()
 17 {
 18     pthread_t threads[NUM_THREADS];
 19
 20     for (int i = 0; i < NUM_THREADS; ++i) {
 21         pthread_create(&threads[i], NULL, foo, NULL);
 22     }
 23
 24     for (int i = 0; i < NUM_THREADS; ++i) {
 25         pthread_join(threads[i], NULL);
 26     }
 27
 28     printf("final result is %d\n", shared);
 29
 30     return 0;
 31 }

chatGPT와 씨름하여 얻은 결과는 불가능하다는 것이었습니다.
파이썬은 인터프리터 구조상 쓰레드의 병렬접근이 안되어, 한번에 하나의 쓰레드만 처리되기
때문에 위의 코드와 동일한 결과를 내는 코드 구현이 불가능하다고 하네요...

혹시나 chatGPT가 틀릴수도 있다는 희망에 질문 남겨 봅니다.

항상 정성스런 답변 매번 감사하게 생각하고 있습니다.

안녕하세요 :) 맞습니다.
관련하여 공식 문서를 첨부해드리는 것이 가장 정확하지 않을까 싶어 인용해드립니다.

The mechanism used by the CPython interpreter to assure that only one thread executes Python bytecode at a time.

https://docs.python.org/3.9/glossary.html#term-global-interpreter-lock