[초보질문-_-]뮤텍스로 잠긴 변수를 단순히 읽기만 하는 문제
글쓴이: iamsjkim / 작성시간: 수, 2003/10/08 - 2:57오후
(환경 : linux gcc)
공용변수 flag가 정의되어 있을 경우
쓰레드 1에서 flag값을 변경하기 위해 뮤텍스 잠금을 했습니다.
그동안 메인 쓰레드에서는 flag값이 뭘로 설정되어있는지 확인하고 싶다고 가정한다면
메인 쓰레드는 flag값을 읽을 수 있나요?
아니면 쓰레드1이 뮤텍스 해제할때까지 flag값을 못읽고 블록되나요?
이런 질문이 가능한지도 잘 모르겠지만..T.T
아시는 분들께 답변 부탁드리겠습니다.
Forums:
일반적으로 Mutex는 풀리기 전까지 Block됩니다.
일반적으로 Mutex는 풀리기 전까지 Block됩니다.
_____________________________
언제나 맑고픈 샘이가...
http://purewell.biz
읽기위해서 mutex를 사용하지 않는다면,당연히 읽을 수있지요.
읽기위해서 mutex를 사용하지 않는다면,
당연히 읽을 수있지요.
그리고, 그 값이 consistenct 해야 한다면, word size일 경우
그냥 읽어도 되고,
더 클 경우 mutex를 사용하시는 게 낫습니다.
낫다고 한 이유는 Mutex없이 non-blocking 알고리즘을
사용해서 읽는 쓰레드와 쓰는 쓰레드간의 contention을 없애는
방법도 있기 때문입니다.
김성진 드림
고도의 추상화, 극도의 구체화, 에디슨을 그리워하다.
[quote]낫다고 한 이유는 Mutex없이 non-blocking 알고
잘 모르는 이야기라서...
조금만 더 설명해 주실 수 있나요?
우리 모두 리얼리스트가 되자. 그러나 가슴에 이룰 수 없는 꿈을 가지자
첨언하여...쓰레드간의 경쟁을 없애는 경우..
보통 queueing 문제를 service/distribution 형태로 제작할때 쓰레드간의 contention을 없앨수 있습니다.
보통 이 경우 master thread를 하나 두고 이 녀석이 queue를 관리합니다. 그리고 나서 service worker thread 들은 개별적으로 master thread 가 넣어주는 일감을 받는 sub queue를 가지고 있습니다. 보통 여기에는 master queue의 index만 들어가죠. 일감이 없으면 wait 상태로 들어가고, 일감이 생길때 master가 signal을 날리는 방식을 주로 쓰죠. 이렇게 하면 단 몇개의 쓰레들들은 master queue를 읽기만 하고, master thread는 쓰기만 하고 서로 넌블럭 상태로 작동하죠.
일반적으로 많이 사용되는 queueing algorithm 중에 하나입니다. 이렇게 함으로서 교묘하게 thundering herd 의 문제를 피해가죠.
========================================
* The truth will set you free.
댓글 달기