- 정의)
- 멀티스레드 환경에서 여러 스레드가 동시에 하나의 자원(함수, 변수, 객체)에 접근해도 프로그램의 실행에 문제가 없는 것(의도한 대로 동작하는 것)
- 멀티스레드 환경에서 여러 스레드가 동시에 데이터를 읽거나 쓰는 등의 작업을 할 때, 데이터의 일관성과 정확성을 보장하는 것
- 하나의 함수가 한 스레드로부터 호출되어 실행 중일 때, 다른 스레드가 그 함수를 호출하여 동시에 함께 실행되더라도 각 스레드에서의 함수의 수행 결과가 올바르게 나오는 것
- 구현)
- 스레드 안전을 보장하기 위해선 스레드 간의 동기화가 필요함
- 더 정확히는, 공유 자원에 접근하는 임계영역(critical section)을 동기화 기법으로 제어해줘야 함 → 이를 ‘상호배제’라고 함
- 임계구역 : 공유메모리에 접근하는 프로그램의 코드 부분
- 상호배제 구현 방법)
- lock-based
- 정의)
- lock을 이용해 동기화 구현
- 공유 자원에 하나의 Thread만 접근할 수 있도록 세마포어 / 뮤텍스로 락을 통제하는 방법
- 예시)
- Mutex(뮤텍스)
- Semaphore(세마포어)
- lock-free
- 정의)
- lock을 사용하지 않고 동기화 구현
- 공유 자원에 접근할 때는 원자 연산을 이용하거나 원자적으로 정의된 접근 방법을 사용함으로써 상호 배제를 구현
- 예시)
- Atomic operation(원자 연산)
- 레퍼런스
