# 빠르게 얻지 못한 잠금은 대기 경로로 넘깁니다

v6.18.37 / kernel/locking/mutex.c

mutex는 공유 객체를 한 번에 한 실행 흐름만 수정하도록 보호합니다. 다른 태스크가 이미 가지고 있으면 기다리며 잠들 수 있으므로 호출 문맥이 중요합니다. 이 짧은 진입 함수에서도 문맥 검사, 빠른 획득, 느린 대기 경로를 구분할 수 있습니다.

## mutex_lock

```c

void __sched mutex_lock(struct mutex *lock)
{
	might_sleep();

	if (!__mutex_trylock_fast(lock))
		__mutex_lock_slowpath(lock);
}

```

### 269행

```c

void __sched mutex_lock(struct mutex *lock)

```

지정한 mutex의 소유권을 얻을 때까지 진행하며 반환값은 없습니다. 빠른 시도가 실패하면 대기 가능한 느린 경로로 들어가므로 잠들 수 있는 실행 문맥에서 사용해야 합니다.

### 271행

```c

	might_sleep();

```

이 위치가 잠들 수 있는 문맥인지 점검합니다. 이 줄 자체가 mutex 대기 목록에 태스크를 넣는 것은 아닙니다.

### 273행

```c

	if (!__mutex_trylock_fast(lock))

```

경쟁이 없는 경우 빠르게 소유권을 얻는 경로를 시도합니다. 실패해야 아래 느린 경로로 들어갑니다.

### 274행

```c

		__mutex_lock_slowpath(lock);

```

대기자 관리와 필요 시 스케줄링을 포함하는 경쟁 처리 경로에서 잠금을 얻습니다.

