A. 공유자원
1. 공유자원실습
a. 공유자원 생성
멀티쓰레드를 공부할 떄 항상 배우는 예제가 있음
위 두개의 함수를 스레드의 자원으로 활용한 스레드를 메인에 생성해주고
둘다 조인으로 종료, 결과값은?
=> 결과값이 작으면 0, 100만번 하면 ???
여기서 전역변수로 만들어진 sum이라는 변수가 데이터 영역에 들어감 (공유됨)
++을 의사코드로 작성하면 위와 같이되는데
멀티스레드로 작동되고 있다고 생각하면 이해됨 (흑마법)
Sum을 공유하고 있기 때문에 코드가 동시 다발적으로 끼어드니까 이런 문제가 발생됨
또 지역변수인(stack 에 저장) i를 다른코드로 밀어준다면 어떻게 될까? => 밀어짐
b. 아토믹
아토믹으로 실행하면 정상적으로 작동됨
아토믹이 되면, 좀 더 복잡해지지만 다른 어셈블리어로 실행해줌
그럼 이제 중간에 누가 끼어들 수 없다
일반 정수에 비해 엄청나게 무겁기때문에 남발할 수 없고
아토믹은 하나의 클래스이기 때문에 다양한 함수를 사용할 수 있음
만약 store 로 10으로 덮기 전 sum은 무슨 값일까?
원래같으면 temp지만 다른 스레드가 바꿔치기 한다면 또 달라진다
아토믹하게 변해버리면 또 이런 문제가 생김
c. 메모리 예제
New int 는 heap 메모리 (공유자원)
Heap이지만 int* 자체가 stack 영역에 있는 변수기 떄문에
위 코드는 안전하다 ㅎㅎ (오류 없음)
'운영체제' 카테고리의 다른 글
[게임 프로그래머 입문 올인원] 멀티쓰레드 프로그래밍 : 이벤트와 조건 변수 (0) | 2024.12.04 |
---|---|
[게임 프로그래머 입문 올인원] 멀티쓰레드 프로그래밍 : 락 기초, 스핀락, 데드락 (0) | 2024.12.03 |
[게임 프로그래머 입문 올인원] 멀티쓰레드 프로그래밍 : 캐시와 CPU 파이프라인 (1) | 2024.12.03 |
[게임 프로그래머 입문 올인원] 멀티쓰레드 프로그래밍 : 쓰레드 (1) | 2024.12.02 |
[게임 프로그래머 입문 올인원] 멀티쓰레드 프로그래밍 : 멀티쓰레드 입문 (116강) (1) | 2024.11.18 |