본문 바로가기

전체 글

(51)
Critical Section & Race Condition Critical Section Critical Section 은 여러개의 thread 에 의해 data 나 resource 가 공유되는 부분을 일컫는다. Race Condition Race Condition 은 thread 가 동기화 되어 있지 않은 상태에서 critical section 영역을 여러 thread 들이 실행할때 발생한다. thread 들은 shared section 을 통해 shared resource 를 읽거나 쓰는 “race” 를 수행하며 각 thread 들이 race 를 끝내는 순서대로 출력을 하게 된다. Race Condition 상황에서는 thread 가 다른 thread 가 접근하고 있는 공유된 자원이나 변수에 접근을 하게 되므로, data 의 일관성이 깨지게 된다.
Deadlock, liveness, Live lock, Starvation Critical Section 을 지키고 Race Condition 을 피하려고 애쓰는동안, Multithread code 의 미묘한 "논리적인 오류" 가 생길수도 있다. 그 논리적인 오류들의 패턴은 다음과 같다. Deadlock deadlock 은 두개 이상의 thread 가 진행을 할 수 없을 경우에 발생한다. 첫번째 스레드가 필요로 하는 resource 를 두번째 스레드가 보유하고 있고, 두번째 스레드가 필요로 하는 resource 를 첫번째 스레드가 보유하고 있을 경우 발생한다. 예를 들어, 아래와 같은 코드에서 increment 의 mutex A 획득과 decrement 의 mutex B 획득이 동시에 이루어졌을때, 그 다음 mutex 를 획득하기 위해 두개의 thread 는 무한히 대기할 것이..
Birthday Problem (생일 문제) 생일 문제는 확률 이론의 유명한 예제 중 하나로, 특정 집단 내에서 적어도 두 명의 사람이 같은 생일을 가질 확률을 계산하는 문제이다. 이 문제는 직관적으로 생각했을 때 예상치 못하게 높은 확률을 보여주기 때문에 The birthday paradox 라고도 불린다. 생일 문제의 기본 생일 문제에서는 일반적으로 365 일이 있는 한 해를 가정하며, 윤년은 고려하지 않는다. 문제의 기본적인 질문은 “어떤 방에 사람들이 있을 때, 적어도 두 사람이 같은 생일일 확률은 얼마인가?” 이다. 계산방법 이 확률을 계산하는 가장 쉬운 방법은 충돌이 발생하지 않을 확률을 계산한 다음 그 값에서 1을 빼는 것이다. 예를 들어, 한 방에 사람이 n 명 있을 경우, 첫 번째 사람의 생일은 어느 날이든 될 수 있고, 두 번째 ..