# 짧은 임계 구역의 진입을 직렬화합니다

v6.6 / include/linux/spinlock.h

spinlock은 여러 CPU가 공유 상태를 동시에 수정하지 않도록 임계 구역의 진입을 조정합니다. 여기서는 일반 non-RT 헤더의 얇은 래퍼를 읽어 spinlock_t 안의 raw 잠금으로 연결되는 모습을 봅니다. PREEMPT_RT의 구현과 IRQ 상태 제어를 같은 것으로 가정하면 안 됩니다.

## spin_lock

```c

static __always_inline void spin_lock(spinlock_t *lock)
{
	raw_spin_lock(&lock->rlock);
}

```

### 349행

```c

static __always_inline void spin_lock(spinlock_t *lock)

```

non-RT 구현의 spinlock_t 잠금을 얻는 래퍼입니다. lock은 보호할 데이터 자체가 아니라 접근 순서를 맞출 잠금 객체이며 __always_inline은 인라인 생성 지시입니다.

### 351행

```c

	raw_spin_lock(&lock->rlock);

```

spinlock_t 안의 raw 잠금 rlock을 전달해 소유권을 얻습니다. 이 non-RT 경로는 선점을 제어하지만 일반 spin_lock 호출이 로컬 IRQ까지 자동 차단하는 것은 아닙니다. 같은 CPU의 IRQ 처리기가 같은 잠금을 사용한다면 IRQ 제어까지 맞춰야 합니다.

