Skip to content

volatile 키워드는 언제 사용하게? #19

@Jinsun-Lee

Description

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions