pthread가 mutex lock 상태인지 아닌지 판별

alice79의 이미지

안녕하세요.

스레드가 뮤텍스 락/언락 상태인지 다른 루틴에서 확인해야 하는데

pthread_mutex_t 값에는 락 상태이면 0, 언락 상태면 뮤텍스 값이 들어가는 듯 해서

while(state_dir.mutex != 0)/*no work*/; /* 스레드 작업이 끝날 때까지 대기 */

이런 식으로 비교연산을 하면 간단할 줄 알았는데 정의되지 않은 연산이라고 나오네요.

pthread가 mutex lock 상태인지 아닌지 판별할 수 있는 방법이 있을까요?

IsExist의 이미지

_trylock() 이라는 함수는 있습니다.
---------
간디가 말한 우리를 파괴시키는 7가지 요소

첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스

이익추구를 위해서라면..

다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치

---------
간디가 말한 우리를 파괴시키는 7가지 요소

첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스

이익추구를 위해서라면..

다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치

alice79의 이미지

아 trylock 리턴값으로 알 수 있겠군요.
pthread_mutex_trylock 함수가 EBUSY 를 리턴하면 뮤텍스가 이미 잠겨 있다는 사실을 나타낸다..\

jick의 이미지

while (!pthread_mutex_trylock()) 을 하느니 그냥 pthread_mutex_lock 해버리면 거의 똑같은 효과가 날 텐데요 (심지어 좀 더 효율적일 가능성도 있음.)