|
2008년 7월 4일에 수정: 아래 Lock-free stack을 만들라는 문제는 모 회사의 프로그래밍 면접에서 받은 문제였다. 그 당시에는 Lock-free 자료구조를 몰라 제대로 답을 할 수가 없었는데 알고보니 Lock-free data structures로 매우 많이 연구된 분야이다. 일단 Wiki에서 Compare-and-set 부터 시작해서 글 타래를 읽어보면 엄청난 자료들을 만날 수 있다. 참고문헌: Damian Dechev, Peter Pirkelbauer, and Bjarne Stroustrup. Lock-free Dynamically Resizable Arrays Stack과 Queue. 전산학과 1학년들도 만들 수 있는 매우 기초적인 자료구조. 한번 Stack 자료구조를 만들어 보시오. 단 다음과 같은 조건을 지켜야 한다.
왜 이런 문제를 내느냐? 락이 있고 없고의 성능차가 제법, 혹은 엄청나게 차이가 나기 때문이다. 보통 일반적인 critical section의 구현은 block-wait로 구현이 되어있다 (즉, kernel-user transition이 유발). 이 경우, Push/Pop이 두개 이상의 스레들로부터 매우 빈번히 불리면 block-wait에 들어가는 비용이 너무 커진다. 그래서 CPU utilization도 낮아지고 (실제로 이런 경우, 돌려보면 CPU 소비율이 꽤 낮게 측정된다) 전체적인 throughput이 저하되기 때문에 이런 전통적인 방식의 락은 최소화 해야한다.
최근 등록된 덧글
이 글을 보고 온라인 알고리..
by 김정은 at 02:45 리눅스 커널도 바닐라가 있죠.. by Corund at 07/03 궁금증이 이제야 풀리네요... by 유겸애비 at 07/03 아무래도 mpeg 코덱 특성 .. by object at 07/02 그런 건 아닙니다. 논문 중에.. by object at 07/02 최근에 LCD TV를 구입해서.. by kirrie at 07/02 Supreme Commander의 .. by daybreaker at 07/02 같은 입맛을 가지셨군요... by 덤덤 at 07/02 최근 등록된 트랙백
메뉴릿
|