8회차 운영체제 | 데드락, 동기화(뮤텍스, 세마포어) 등 질문 정리

728x90

24.01.26 나온 질문 공유

1) 뮤텍스와 스핀락이 어떤 상황에 적합한지

- 뮤텍스 : 대부분의 상황에서 뮤텍스가 더 효율적이다.
- 스핀락 : 임계구역 내 작업 시간이 문맥 교환 시간보다 빠를 때는 스핀락이 더 효율적이다.

2) 데드락의 발생 조건 4가지

상호 배제/ 점유 대기/ 비 선점/ 원형 대기

3) 동기화 문제가 무엇인지 설명

동기화 문제 - 스레드가 동시에 공유자원에 대한 접근할 때, 원자적으로 수행되지 않아 일관적이지 않게 됨

4) 세마포어와 뮤텍스의 차이

  1. 세마포어 - 여러 자원에 접근 가능, 락을 건 주체가 락을 해제가능
  2. 뮤텍스 차이 - 공유자원이 한개일 때 사용 가능, 락을 건 주체 아니어도 락 해제 가능

5) 회피 기법 중 은행원 알고리즘 단점

  1. 자원 할당량을 미리 알아야하는데 미리 아는 것이 현실적으로 어렵다
  2. 항상 안정 상태를 유지해야하다보니 일정 자원은 남겨둬야하기 때문에 이용 효율이 낮다.

6) 동기화 문제를 해결하기 위한 3가지 충분 조건

상호배제, 진행, 한정 대기

7) 식사하는 철학자 문제에 대해 간단히 설명 후 해결 방안 1가지

8) 데드락을 해결하는 방법 간단하게

발견 및 해결/ 회피/ 예방

9) 세마포어 구현 방식 2가지에 대해 설명

busy waiting, block and wakeup

10) 경쟁상태를 해결하기 위한 방법

뮤텍스, 세마포어, 모니터

11) 교착 상태와 기아 상태의 차이가 무엇인가?

기아 - 여러 프로세스가 경쟁을 하는데 특정 프로세스가 영원히 자원을 못받는 상태, 자신의 차례만 안오는 문제

 


관련 질문 정리

교착 상태 해결책

  1. n명이 앉을 수 있는 테이블에서 철학자를 n-1명만 앉힘
  2. 한 철학자가 젓가락 두개를 모두 집을 수 있는 상황에서만 젓가락 집도록 허용
  3. 누군가는 왼쪽 젓가락을 먼저 집지 않고 오른쪽 젓가락을 먼저 집도록 허용

교착상태 (Dead Lock)

데드락은 프로세스가 자원을 얻지 못해, 다음 작업을 못하는 상태입니다.

예를 들어보면, 프로세스1과 프로세스2가 각각 자원 A와 B를 얻어야되는데,

프로세스1은 A를, 프로세스2는 B를 가지고 있어서, 서로 무한정 기다리는 상태를 데드락이라고 합니다.

발생조건

데드락은 다음의 네가지 조건이 동시에 발생해야 성립이 가능합니다.

그 네가지는 상호배제, 점유대기, 비선점, 순환대기(상대방이 자원을 서로 대기하는 것) 입니다.

데드락 해결방법

데드락을 예방하는 방법으로는, 예방 / 회피가 있습니다.
먼저 예방은,
상호배제/점유대기/비선점/순환대기 같이 교착상태 발생조건 4가지 중 하나를 부정함으로써 교착상태를 예방하는 방법입니다.
상호 배제 부정여러 개의 프로세스가 동시에 공유자원을 사용할 수 있습니다.점유 대기 부정프로세스가 실행되기 전에 필요한 모든 자원을 할당하여 프로세스 대기를 없애거나, 자원이 점유되지 않은 상태에서만 자원 요청을 받도록 함비선점 부정모든 자원에 대한 선점을 허용순환 대기 부정자원을 선형으로 분류하여 고유 번호를 할당하고, 각 프로세스는 현재 점유한 자원의 고유번호보다 앞이나 뒤 한쪽 방향으로만 자원을 요구하도록 함그러나, 이렇게 교착상태 발생조건을 방지해서 데드락을 예방하는 방법은 시스템 처리량이나 자원 사용의 효율성을 떨어트리는 단점이 있습니다.

회피는,
교착상태가 발생할 가능성이 있는 자원을 할당(Unsafe allocation)하지 않고 안전한 상태(Safe state)에서만 자원 요청을 허용하는 방법입니다. 하지만 교착상태 회피를 하기 위해서는 아래와 같은 가정이 필요합니다.
프로세스 수 고정자원의 종류와 수 고정프로세스가 요구하는 최대 자원의 수를 알아야 함프로세스는 자원 사용 후 반드시 반납

데드락을 회피하기 위한 알고리즘으로 크게 두 가지가 있습니다.
은행원 알고리즘(Banker's Algorithm)과 자원 할당 그래프 알고리즘(Resource-Allocation Graph Algorithm) 입니다.
은행원 알고리즘은, 자원 할당 결정전에 예상되는 모든 자원의 최대 할당량을 가지고 시뮬레이션을 하여 safe state에 들 수 있는지 여부를 검사하여 교착상태의 가능성을 미리 조사하는 알고리즘입니다.
기본 개념 자체는 "CPU는 최소한 하나의 프로세스에게 할당해줄 만큼의 자원을 항상 보유하고 있어야 한다" 입니다.
자원 할당 그래프는, 예약 간선을 추가하여 예약 간선으로 설정한 자원에 대해서만 자원 할당을 요청할 수 있고 사이클이 형성되지 않을 때만 자원을 할당받는 방법입니다.

Safe state : safe sequence(교착상태를 발생시키지 않고 자원을 할당하는 순서)가 존재하며 모든 프로세스가 정상적으로 종료될 수 있는 상태를 의미
Unsafe state : 교착상태가 발생할 가능성이 있는 상태

회복기법

회복 기법은 교착상태가 발생했을 때 해결하는 기법을 의미합니다.
기법 종류로는 사용자 처리와 시스템 처리가 있습니다.
사용자 처리는, 교착상태에 있는 프로세스 중 하나의 프로세스를 사용자가 강제 종료시키는 것 입니다.
시스템 처리는 두가지로 나뉘는데,
첫번째는, 프로세스 중지입니다.
교착상태에 속해있는 모든 프로세스를 중지하거나 교착상태가 해결될 때까지 한 프로세스씩 중지
두번째는, 자원선점 입니다.
프로세스들로부터 자원을 빼앗아 교착상태가 해결될 때까지 다른 프로세스들에게 자원을 할당합니다.

임계구역 (Critical Section)?

임계구역이란, 여러 개의 프로세스가 공유하는 데이터 및 자원에 대해서 어느 한 시점에서는 하나의 프로세스만 자원 또는 데이터를 사용하도록 제한하는 코드 영역을 의미합니다. 임계구역은 특정 프로세스가 독점할 수 없습니다.

Mutex란?

뮤텍스는, 상호배제라고도 하며, 임계 영역을 가진 쓰레드의 러닝타임이 서로 겹치지 않게 각각 단독으로 실행하는 기술입니다. 즉, 임계구역에 하나의 스레드만 접근이 가능합니다.

Semaphore란?

세마포어는, 스레드 접근성을 높이고자 사용되며, 임계구역에 여러 스레드가 접근이 가능합니다. 카운터를 두어서 동시에 자원에 접근할 수 있도록 스레드 수를 제어하여 다중 프로세스에서 행동을 조정하거나 동기화 시키는 기술입니다.

Mutex, Semaphore 차이

스레드를 단일 또는 여러개 제어할 수 있는 세마포어는 뮤텍스가 될 수 있지만, 단일 스레드만 처리하는 뮤텍스는 세마포어가 될 수 없습니다. 그리고, 세마포어는 시스템 범위에 걸쳐있고 파일 시스템 상의 파일 형태로 존재합니다. 반면, 뮤텍스는 프로세스 범위를 가지고 프로그램이 종료될 때 자동으로 지워집니다.

정리하자면, 뮤텍스는 동기화 대상이 하나일때, 세마포어는 하나 이상일 때 사용합니다.

Monitor란?

하나의 프로세스 내의 다른 스레드 간 동기화에 사용되는 기술입니다. 뮤텍스의 상위호환 개념으로, 사용자가 프로세스에 lock을 거는 등 동기화 제약 조건을 명시적으로 코딩할 필요가 없다는게 특징입니다.

(뮤텍스는 다른 프로세스간에 동기화할떄 사용)

데드락에 대해 설명해주세요.

둘 이상의 프로세스들이 자원을 점유한 상태에서 서로 다른 프로세스가 점유하고 있는 자원을 요구하며 무한정 기다리는 상황을 말합니다.예를 들어, 자원 A를 가진 프로세스 P1과 자원 B를 가진 프로세스 P2가 있을 때, P1은 B를 필요로 하고 P2는 A를 필요로 한다면 두 프로세스는 서로 자원을 얻기 위해 무한정 기다리게 됩니다.

데드락의 4가지 조건 비선점 (Nonpreemptive) : 다른 프로세스의 자원을 뺏을 수 없음.

순환 대기 (Circular wait) : 두 개 이상의 프로세스가 자원 접근을 기다릴 때, 관계가 순환적 구조.

점유 대기 (Hold & Wait) : 공유 자원에 대한 접근 권한을 가진 채로 다른 자원에 대한 접근 권한을 요구

상호 배제(Mutual Exclusion) : 한 번에 한 프로세스만 공유 자원에 접근 가능하며, 접근 권한이 제한적일 경우.

Critical Section(임계영역)에 대해 설명해주세요.

임계 영역이란 프로세스간에 공유자원을 접근하는데 있어 문제가 발생하지 않도록 한번에 하나의 프로세스만 이용하게끔 보장해줘야 하는 영역을 말합니다.임계 영역 문제를 해결하기 위해서는 아래의 3가지 조건을 충족해야 합니다.

상호 배제(Mutual exclution) - 하나의 프로세스가 임계 영역에 들어가 있다면 다른 프로세스는 들어갈 수 없어야 한다.

진행(Progress) - 임계 영역에 들어간 프로세스가 없는 상태에서 들어가려 하는 프로세스가 여러 개라면 어느 것이 들어갈지 결정 해주어야 한다.

한정 대기(Bounded waiting) - 다른 프로세스의 기아를 방지하기 위해, 한 번 임계 구역에 들어간 프로세스는 다음 번 임계 영역에 들어갈 때 제한을 두어야 한다.

뮤텍스(Mutex)와 세마포어(Semaphore)의 차이에 대해 설명해주세요.

뮤텍스는 Lock을 사용해 하나의 프로세스나 쓰레드를 단독으로 실행하게 합니다.반면에 세마포어는 공유자원에 세마포어 변수만큼의 프로세스(또는 쓰레드)가 접근할 수 있습니다.

세마포어의 변수 → 공유자원의 개수를 나타내는 변수

현재 수행중인 프로세스가 아닌 다른 프로세스가 세마포어를 해제할 수 있습니다.

하지만 뮤텍스는 락(lock)을 획득한 프로세스가 반드시 그 락을 해제해야 합니다.

0과 1의 값만 갖는 세마포어 →이진 세마포어(binary semaphore)

도메인 제한이 없는 세마포어(0,1 뿐만아니라 2,3,4 등의 값들 또한 가질 수 있는) →카운팅 세마포어(counting semaphore)

Deadlock(교착상태)란?

2개 이상의 프로세스나 스레드가 서로 자원을 기다리면서 무한히 기다리게 되는 상태입니다

교착상태의 4가지 조건은 무엇인가?

  1. 상호배제 : 한 자원에 대한 여러 프로세스의 동시 접근은 불가능하다
  2. 점유와 대기 : 하나의 자원을 소유하고 다른 프로세스 또는 스레드의 자원을 요청하는 상태이다
  3. 비선점(Non preemptive): 다른 프로세스에서 자원을 사용하는 동안 자원을 강제로 가져올 수 없다
  4. 환형 대기: 각 프로세스가 다음 프로세스가 요구하는 자원을 가지고 있는 상태이다.

교착상태의 해결방법은?

  1. 예방 : 교착상태가 발생하지 않도록 하는 것
  2. 회피 : 교착상태를 피하는 것 ex) Banker’s algorithm
  3. 탐지 : 교착상태가 발생하면 탐지하는 것
  4. 복구 : 프로세스를 중지하고 자원을 선점

Banker’s algorithm은 무엇인가?

프로세스가 자원을 요구할 때 시스템은 자원을 할당한 후에도 안정 상태로 남아있게 되는지를 사전에 검사하여 교착 상태를 회피하는 기법입니다. 안정 상태에 있으면 자원을 할당하고, 그렇지 않으면 다른 프로세스들이 자원을 해지할 때까지 대기합니다.

 뮤텍스란 무엇인가?

뮤텍스는 1개의 Lock만을 갖는 Locking 매커니즘으로 오직 하나의 쓰레드만이 동일한 시점에 뮤텍스를 얻어 critical section에 들어올 수 있습니다. 그리고 오직 이 쓰레드만이 critical section을 나갈 때 뮤텍스를 해제할 수 있습니다.

  • Critical section : 임계 구역. 공유되는 자원, 즉 동시에 접근하려고 하는 자원에 문제가 발생하지 않게 독점을 보장하는 영역

 세마포어란 무엇인가?

세마포어는 signaling 메커니즘으로 락을 걸지 않은 쓰레드도 signal을 보내 락을 해제할 수 있습니다. Wait 함수를 호출하면 세마포어 count를 1 줄이고, 세마포어의 count가 0 이하이면 락이 실행됩니다.

뮤텍스와 세마포어의 차이는?

뮤텍스와 세마포어는 모두 동기화를 위해 이용되는 도구입니다. 뮤텍스는 Locking 알고리즘으로 락을 걸은 쓰레드만이 critical section을 나갈 떄 락을 해제할 수 있습니다. 하지만 세마포어는 signaling 메커니즘으로 락을 걸지 않은 쓰레드도 signal을 사용해 락을 해제할 수 있습니다. 세마포어의 카운트를 1로 설정하면 뮤텍스처럼 활용할 수 있습니다.

데드락(DeadLock) 이란?

데드락(DeadLock) 또는 교착상태란 한정된 자원을 여러 프로세스가 사용하고자 할 때 발생하는 상황으로, 프로세스가 자원을 얻기 위해 영구적으로 기다리는 상태입니다.

 데드락의 4가지 조건에 대해 설명해 주세요.

1. 상호 배제(Mutual Exclusion) : 한 번에 한 프로세스만 공유 자원에 접근 가능합니다.

2. 점유 대기 (Hold & Wait) : 공유 자원에 대한 접근 권한을 가진 채로 다른 자원에 대한 접근 권한을 요구.

3. 비선점 (Nonpreemptive) : 다른 프로세스의 자원을 뺏을 수 없음.

4. 순환 대기 (Circular wait) : 두 개 이상의 프로세스가 자원 접근을 기다릴 때, 관계가 순환적 구조.

4가지 모두 성립해야 데드락 발생합니다. 하나라도 성립하지 않으면 데드락 문제 해결 가능합니다.

 교착 상태 처리 방법에 대해 설명해 주세요.

1. 예방(prevention)
교착 상태 발생 조건 중 하나를 제거하면서 해결한다 (자원 낭비 엄청 심하다는 단점 존재)
상호배제 부정 : 여러 프로세스가 공유 자원 사용 - 불가능점유대기 부정 : 프로세스 실행 전 모든 자원을 할당비선점 부정 : 자원 점유 중인 프로세스가 다른 자원을 요구할 때 가진 자원 반납순환대기 부정 : 자원에 고유번호 할당 후 순서대로 자원 요구 - 가장 현실적
2. 회피(avoidance)
은행원 알고리즘(Banker's Algorithm)
은행에서 모든 고객의 요구가 충족되도록 현금을 할당하는데서 유래함프로세스가 자원을 요구할 때, 시스템은 자원을 할당한 후에도 안정 상태로 남아있게 되는지 사전에 검사하여 교착 상태 회피안정 상태면 자원 할당, 아니면 다른 프로세스들이 자원 해지까지 대기
3. 탐지 & 회복
교착 상태가 되도록 허용한 다음 회복시키는 방법
탐지(Detection)
자원 할당 그래프를 통해 교착 상태를 탐지함
회복(Recovery)
교착 상태 일으킨 프로세스를 종료하거나, 할당된 자원을 해제시켜 회복시키는 방법
프로세스 종료 방법
교착 상태의 프로세스를 모두 중지교착 상태가 제거될 때까지 하나씩 프로세스 중지
자원 선점 방법
교착 상태의 프로세스가 점유하고 있는 자원을 선점해 다른 프로세스에게 할당 (해당 프로세스 일시정지 시킴)우선순위가 낮은 프로세스나 수행 횟수 적은 프로세스 위주로 프로세스 자원 선점

 회피 기법인 은행원 알고리즘을 설명해 주세요.

은행원 알고리즘은 운영체제가 안전상태를 유지할 수 있는 요구만을 수락하고 불안전 상태를 초래할 사용자의 요구는 나중에 만족될 수 있을 때까지 계속 거절하는 알고리즘입니다.

경쟁 상태(Race Condition)

공유 자원에 대해 여러 프로세스가 동시에 접근할 때, 결괏값에 영향을 줄 수 있는 상태로

동시 접근 시 자료의 일관성을 해치는 결과가 나타남

Race Condition이 발생하는 경우는 어떤 경우일까요?

1. 커널 작업을 수행하는 중에 인터럽트 발생

  • 문제점 : 커널모드에서 데이터를 로드하여 작업을 수행하다가 하는 경우
  • 인터럽트가 발생하여 같은 데이터를 조작
  • 해결법 : 커널모드에서 작업을 수행하는 동안, 인터럽트를 disable 시켜 CPU 제어권을 가져가지 못하도록 한다.

2. 프로세스가 'System Call'을 하여 커널 모드로 진입하여 작업을 수행하는 도중 문맥 교환이 발생할 때

  • 문제점 : 프로세스 1이 커널모드에서 데이터를 조작하는 도중, 시간이 초과되어 CPU 제어권이 프로세스 2로 넘어가 같은 데이터를 조작하는 경우 ( 프로세스 2가 작업에 반영되지 않음 )
  • 해결법 : 프로세스가 커널모드에서 작업을 하는 경우 시간이 초과되어도 CPU 제어권이 다른 프로세스에게 넘어가지 않도록 함

3. 멀티 프로세서 환경에서 공유 메모리 내의 커널 데이터에 접근할 때

  • 문제점 : 멀티 프로세서 환경에서 2개의 CPU가 동시에 커널 내부의 공유 데이터에 접근하여 조작하는 경우
  • 해결법 : 커널 내부에 있는 각 공유 데이터에 접근할 때마다, 그 데이터에 대한 lock/unlock을 하는 방법

 Critical Section(임계영역)에 대해 설명해 주세요.

동일한 자원을 동시에 접근하는 작업을 실행하는 코드 영역을 Critical Section이라 합니다.

임계 영역 문제를 해결하기 위해서는 아래의 3가지 조건을 충족해야 합니다.

  1. 상호 배제(Mutual exclution) - 하나의 프로세스가 임계 영역에 들어가 있다면 다른 프로세스는 들어갈 수 없어야 한다.
  2. 진행(Progress) - 임계 영역에 들어간 프로세스가 없는 상태에서 들어가려 하는 프로세스가 여러 개라면 어느 것이 들어갈지 결정해주어야 한다.
  3. 한정 대기(Bounded waiting) - 다른 프로세스의 기아를 방지하기 위해, 한 번 임계 구역에 들어간 프로세스는 다음번 임계 영역에 들어갈 때 제한을 두어야 한다.

프로세스 동기화 해결책 : 세마포어(Semaphore) vs 뮤텍스(Mutex) 차이

뮤텍스

  • 하게 합니다.
  • Lock을 사용해 하나의 프로세스나 스레드를 단독으로 실행
  • Critical Section에 진입하는 프로세스는 Lock을 획득하고 Critical Section 을 빠져나올 때, Lock 을 방출함으로써 동시에 접근이 되지 않도록 한다.
  • 락(lock)을 획득한 프로세스가 반드시 그 락을 해제해야 합니다.
  • 단점 : 다중처리기 환경에서는 시간적인 효율성 측면에서 적용할 수 없다.

세마포어

  • 공유자원에 세마포어 변수만큼의 프로세스(또는 스레드)가 접근할 수 있습니다.
  • 현재 수행 중인 프로세스가 아닌 다른 프로세스가 세마포어를 해제할 수 있습니다.
  • 0과 1의 값만 갖는 세마포어 → 이진 세마포어(binary semaphore) (= 뮤텍스)

뮤텍스와 모니터의 차이?

  • 뮤텍스는 다른 프로세스나 스레드 간 동기화를 위해 사용한다.
  • 모니터는 하나의 프로세스내에서 다른 스레드 간 동기화 할 때 사용한다.
  • 뮤텍스는 운영체제 커널에 의해 제공된다.무겁고 느리다.
  • 모니터는 프레임워크나 라이브러리 그 자체에서 제공된다.가볍고 빠르다.

세마포어와 모니터의 차이?

  • 자바에서 모니터를 모든 객체에게 기본적으로 제공하지만 C에서는 사용이 불가하다.
  • 세마포어는 카운터라는 변수 값으로 프로그래머가 상호 배제나 정렬의 목적으로 사용시 매번 값을 따로 지정해줘야 하는 번거로움이 있다.
  • 반면, 모니터는 이러한 일들이 캡슐화되어 있어 개발자가 카운터 값을 0 또는 1로 주어야 하는 고민을 할 필요가 없어 synchronized, wait(), notify() 등의 키워드를 이용해 좀 더 편하게 동기화 할 수 있다.

 세마포어와 뮤텍스의 차이?

  • 세마포어는 뮤텍스가 될 수 있지만, 뮤텍스는 세마포어가 될 수 없다.
  • 세마포어는 소유할 수 없으며, 뮤텍스는 소유할 수 있고 소유주가 그 책임을 진다.
  • 뮤텍스의 경우, 뮤텍스를 소유하고 있는 스레드가 이 뮤텍스를 해제할 수 있지만 세마포어는 소유하지 않고 있는 다른 스레드가 세마포어를 해제할 수 있다.
  • 뮤텍스는 동기화 대상이 1개일때 사용하고 세마포어는 동기화 대상이 여러개 일 때 사용한다.

스핀락(Spinlock)이 무엇이며 어떤 상황에서 사용되나요?

답변: 스핀락은 다중 프로세스 또는 스레드가 공유 자원에 대한 접근을 동기화하기 위해 사용되는 동기화 메커니즘 중 하나입니다. 스핀락은 일반적으로 먼저 해당 자원이 다른 프로세스에 의해 점유되지 않았는지 확인하고, 점유되어 있지 않다면 스핀락을 획득하여 작업을 진행합니다. 만약 다른 프로세스가 해당 자원을 점유하고 있다면, 스핀락은 계속해서 반복하여 자원의 해제를 기다립니다. 스핀락은 적은 오버헤드로 동작하며, 자원에 대한 접근이 짧은 시간 동안 보유될 것으로 예상될 때 효과적입니다.

어토믹(Atomic) 연산이 무엇이며 왜 필요한가요?

답변: 어토믹 연산은 하나의 연산이 다른 연산과 중간에 간섭받지 않도록 보장하는 연산입니다. 이는 멀티스레드 환경에서 공유된 변수에 대한 동시적인 접근 문제를 해결하기 위해 사용됩니다. 일반적으로, 어토믹 연산은 여러 단계의 명령어를 단일 연산으로 간주하며, 이 중간에 다른 스레드가 개입하지 않도록 보장합니다.

어토믹 연산은 일반적으로 원자성(Atomicity), 일관성(Consistency), 독립성(Isolation), 지속성(Durability) 등의 ACID 속성을 보장하여 데이터 무결성을 유지하는 데 중요한 역할을 합니다. 특히, 여러 스레드가 동시에 공유된 자원에 접근하는 상황에서 발생할 수 있는 경쟁 조건을 방지하기 위해 사용됩니다.

어토믹 연산이 왜 동기화에서 중요한 역할을 하는가요?

답변: 어토믹 연산은 멀티스레드 환경에서 여러 스레드가 동시에 공유된 자원에 접근할 때 발생할 수 있는 경쟁 조건을 방지하기 위해 중요합니다. 어토믹 연산은 연산을 하나의 단일 단계로 취급하여, 다른 스레드가 중간에 간섭하지 않도록 보장합니다. 이로써 데이터 일관성과 무결성을 유지하며 동기화 문제를 해결할 수 있습니다.

어토믹 연산의 예시를 들어 설명해보세요.

답변: 예를 들어, 카운터 값을 증가시키는 연산을 생각해봅시다. 여러 스레드가 동시에 이 카운터 값을 증가시키려고 할 때, 일반적으로 다음과 같은 순서로 진행됩니다.

  1. 현재 카운터 값을 읽어옴
  2. 읽어온 값에 1을 더함
  3. 결과 값을 다시 저장

이 과정에서 만약 여러 스레드가 동시에 1단계에서 카운터 값을 읽어와서 2단계에서 증가시키는 경우, 경쟁 조건이 발생할 수 있습니다. 어토믹 연산을 사용하면 이러한 연산을 하나의 단일 연산으로 처리하여 중간에 다른 스레드가 개입하지 않도록 보장합니다.

 어토믹 연산을 사용하지 않고 동기화 문제를 해결하는 다른 방법은 무엇이 있나요?

답변: 어토믹 연산을 사용하지 않고 동기화 문제를 해결하기 위해서는 보다 복잡한 동기화 메커니즘이 필요할 수 있습니다. 예를 들어, 뮤텍스(Mutex)나 세마포어(Semaphore)와 같은 동기화 기법을 사용하여 임계 영역을 설정하고, 해당 영역에 들어가는 코드를 상호배제할 수 있습니다. 그러나 어토믹 연산은 이러한 기법보다 더 경제적이고 효율적인 방법을 제공합니다.

728x90