최근에 나는 올바른 코드에 작은 값을 가지는 디버깅 도구로 주로 오류 검사 뮤텍스를 고려,하지만 나는 그들이 같이 그들이 재귀 뮤텍스를 대체 할 수있는 속성이 실현 될 때까지 :재귀 또는 오류 검사 뮤텍스?
void foo()
{
int ok_to_unlock = !pthread_mutex_lock(m);
/* do something */
if (ok_to_unlock) pthread_mutex_unlock(m);
}
주 pthread_mutex_lock
그 성공시 0을 반환하고 호출자가 이미 잠금을 보유하고있는 경우 EDEADLK
을 반환합니다. 이 사용법에는 임의의 재귀 적 잠금 제한을 초과 할 필요가 없다는 이점이 있습니다. "잠금 횟수"는 호출 프레임에 함축되어 있습니다. 원칙적으로이 관용구는 호출 스레드가 이미 잠금을 유지했을 때 pthread_mutex_unlock
에 대한 함수 호출이 수행되지 않으므로 약간 더 나은 성능을 보입니다.
내 질문에 대한 스타일은 주로 다음과 같습니다. 코드의 선명도를 떨어 뜨리는 오류 검사 뮤텍스를 사용합니까? 이런 식으로 사용하고 싶지 않은 다른 이유가 있습니까?
매우 주관적인 것처럼 들립니다. :) – unwind
나는 가정한다. 마지막 문장의 질문은 비 주관적인 생각 일뿐입니다 (스타일이 아닌 이유로이 사용법은 나쁠 것입니다). –
스타일 외에도 PTHREAD_MUTEX_ERRORCHECK의 성능을 조사 할 것입니다. pthread_mutex_xxx 호출을 몇 개 저장하면 에러 체크 뮤텍스가 나온다면 가치가 없을 수도 있습니다. 보통 또는 재귀 뮤텍스보다 10 배 느림 – nos