|
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이 저하되기 때문에 이런 전통적인 방식의 락은 최소화 해야한다.
최근 등록된 덧글
zzzzzzzzzzzzzzzzz..
by xxx at 23:10 저도 논문을 위해 작문위주의.. by Gerald at 10/11 opaque type은 내부를 알 .. by 몽몽이 at 10/09 샘이님 말씀에 한 표~ ^^;; by 엽우 at 10/09 Globefish 라는 Firefox .. by nurigis at 10/09 커스텀 사전에서 명사로 등.. by 게드 at 10/09 그렇네요. 제가 가지고 있는.. by object at 10/09 전산용어가 되면 뭐든지 셀 .. by 샘이 at 10/09 최근 등록된 트랙백
|