-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
- volatile은 컴파일러가 해당 변수에 대한 메모리 접근을 최적화로 제거하지 못하도록 하는 키워드
- 그렇지 않으면 컴파일러가 값을 레지스터에 보관하거나 반복 접근을 제거하여 무한 루프에 빠질 수 있다
- 일반적인 단일 스레드 프로그램에서는 실행 중인 코드가 바꾸는데... 실행 흐름이 여러개일 경우 위험
- 즉, CPU 코드 바깥에서 값이 바뀔 수 있는 상황
- 메모리 맵 I/O 레지스터처럼 하드웨어가 값을 변경하는 경우
- 인터럽트에서 수정되는 공유 변수(ISR에서 값이 비동기적으로 변경되기 떄문에)
- RTOS / 멀티스레드 환경 등 다른 실행 컨텍스트에서 수정되는 변수
- volatile을 붙이면 그 변수에 대한 연산이 atomic해질까?
아니!!! volatile은 최적화를 막는 역할만 한다(동기화 수단이 아님)
= atomic 보장 X, 메모리 순서 보장 X, race condition 방지 X
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels