운영체제(OS)/keyword

(Project2-User Programs) 원자적 연산(Atomic Operation)

스탠딩 2023. 12. 15. 14:47

Atomic Operations(원자 연산)은 다중 스레딩 환경에서 데이터의 일관성과 안전성을 보장하기 위한 중요한 개념이다. Atomic Operations은 '원자적인'이라는 의미로, 이는 연산이 반드시 분리되지 않고 원자적으로 실행되어야 함을 나타낸다. 다중 스레딩 환경에서 여러 스레드가 동시에 데이터를 읽거나 쓰는 경우, 이러한 연산이 원자적으로 수행되지 않으면 예측할 수 없는 결과가 발생할 수 있다.

 

출처 : https://en.wikipedia.org/wiki/Atomic_semantics

위 그림의 경우 원자성이 보장됨으로써 R.write(2) 연산 도중에 R.write(3) 연산의 영향을 받지 않게 된다.

Atomic Operations의 예:

Atomic Add (원자적 덧셈): 여러 스레드가 동시에 하나의 변수에 값을 더하려고 할 때, Atomic Add 연산은 해당 변수의 값을 안전하게 증가시킨다.

cCopy code
atomic_add(&variable, 1);

 

Compare and Swap (비교 및 교체): 특정 조건이 충족될 때만 변수를 변경할 수 있는 연산이다. 다중 스레드에서 공유 자원을 안전하게 업데이트하는 데 사용된다.

cCopy code
atomic_compare_and_swap(&variable, expected_value, new_value);

 

Atomic Operations의 중요성:

 

1. Race Condition 방지: Atomic Operations를 사용하면 여러 스레드 간의 경쟁 조건(Race Condition)을 방지할 수 있다.

 

2. 데드락 회피: 원자적인 연산은 데드락을 회피하고 안전한 동시성을 유지하는 데 도움을 준다.

 

3 .프로그램 안정성 강화: Atomic Operations를 적절히 사용하면 프로그램의 안정성을 높일 수 있다.

 

Atomic Operations은 다중 스레딩 환경에서 프로그램의 안정성과 성능을 유지하기 위한 핵심 도구이다. 이를 올바르게 이해하고 사용함으로써 프로그램의 동시성을 효과적으로 제어 할 수 있다.