목차
학부 수업 내용을 필기한 내용입니다.
필자가 이해를 제대로 못하고 정리한 경우 틀린 내용이 있을 수 있습니다.
그러한 부분이 있다면 댓글로 이야기하여 수정하게 해 주시면 감사하겠습니다.
이번에는 LOCK에 대한 기본적인 개념과, LOCK 구현의 평가기준에 대해 알아볼 것이다.
저번 포스팅에서 여러 스레드가 4번 라인을 실행하려 할 때 Race Condition이 발생한다고 했다.
그 이유는 이와 같이 4번 라인의 과정이 Atomic 하지 않기 때문이다.
그 결과 Indeterminate가 된다.
이러한 문제를 해결하기 위해서 나온 것이 바로 LOCK이다.
위의 코드를 보면 기존 Critical Section의 위아래로 새로운 코드가 추가되어있다.
이것이 LOCK인데, 이러한 처리를 해 줌으로써 하나의 스레드가 처리하는동안에는 다른 쓰레드가 하지 못하도록 막아준다.
Pthread Locks
pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
위의 코드가 같이 필요한 만큼 Lock 변수를 생성 후 초기화하여 사용하면 된다.
3번, 5번 Line에서는 그 변수를 인자로 하여 함수를 사용해서 Lock을 건다.
Evaluating Locks
Lock을 여러 가지 방법으로 만들기 전에 Lock을 평가하는 기준이 있다.
- Correctness(정확도) - 올바르게 되어야 한다.
- Mutual exclusion
- Critical Section에 한 번에 한 스레드만 사용 가능하게 해야 한다.
- Progress(deadlock-free)
- Deadlock에 걸리면 안 된다.
- 최소한 하나의 스레드는 실행되고 있어야 한다.
- Bounded wait(starvation-free)
- Fairness와 연관이 있다. Lock 때문에 기다리기만 하느라 사용을 못하면 안 된다.
- Mutual exclusion
- Fairness
- 공평해야 한다, 각 스레드들이 같은 시간을 기다려야 한다.
- Performance
- CPU의 시간이 효과적으로 되어야 한다.
'공부 > Operating system' 카테고리의 다른 글
OS : Spin Lock (0) | 2022.05.03 |
---|---|
OS : Lock - Controlling Interrupts (0) | 2022.05.03 |
OS : Thread - API (0) | 2022.04.28 |
OS : Concurrency - Race Condition (0) | 2022.04.28 |
OS : Concurrency : 병행성 - Intro(2) (0) | 2022.04.28 |