더북(TheBook)

전역 변수 g_count를 선언하고(#1) thread_main() 함수 안에서 g_count 값에 1을 100,000번 더합니다(#2).

for 문으로 스레드를 총 50개 만들었으니(#3) 스레드 50개가 동시에 g_count에 접근하여 값을 수정하려고 시도할 것입니다. 이처럼 여러 스레드가 동시에 접근·수정·공유 가능한 자원을 ‘공유 자원’이라고 합니다. 이번 예제에서는 g_count라는 전역 변수가 공유 자원입니다.

g_count의 최종 값은 스레드 50개가 각각 100,000번씩 값을 증가시키므로 5,000,000이 될 것 같습니다. 하지만 실행 결과를 보면 매번 다른 값이 나옵니다. 예제를 직접 실행할 때 결과 값이 5,000,000으로 잘 나오는 경우도 있는데 이 결과 값은 큰 의미는 없습니다. 다시 실행해 보면 다른 값이 나오기 때문입니다. 왜일까요?

두 스레드에서 각각 g_count 값을 1씩 올리는 경우를 보면서 그 이유를 알아봅시다. 그림 10-8은 우리가 예상한 결과를 그림으로 나타낸 것입니다.

224

그림 10-8 첫 번째 경우

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.