2012-01-25 4 views
0

다른 사람의 코드를 정리하려고하는데 클래스에 pthread_mutex_t 멤버 변수가있는 경우가 많이 있습니다. 많은 경우에 pthread_mutex_init()이 호출되거나 잠금/잠금 해제되지 않습니다. 그 물체가 범위를 벗어나면, 그 물체를 적절하게 정리하기 위해 무엇이 필요한가? 잠금을 해제하려고 할 수 있습니까 (초기화되지 않았다면 어떻게됩니까?)? 내가 그것을 파괴해야합니까?초기화되지 않은 뮤텍스가 범위를 벗어납니다 - 클린업?

분석 도구에서 리소스가 손실되었을 수 있습니다. 잃어버린 것이 있습니까?

답변

1

정리를 수행하고 사용되지 않는 뮤텍스를 발견하면 제거하는 것이 좋습니다.

뮤텍스를 사용하는 경우 pthread_mutex_destroy()으로 전화해야합니다. 특히, pthread_mutex_init()이 생성자에서 호출되면 클래스 소멸자가이를 수행하기에 좋습니다.

mutex는 파괴 될 때까지 잠금을 해제해야하며 그렇지 않으면 정의되지 않은 동작이 발생합니다. 그러나 mutex가 사용되는 방식에 의해 보장되어야합니다.

+0

내가 말했어 야했는데 : 사용되지 않은 경우가 있습니다. 흔히 그렇지만 항상 그런 것은 아닙니다. _init()는 사용되지 않는 한 호출되지 않으며 확실하지 않습니다. 뮤텍스가 _init()되어 있지 않다면 뮤텍스에서 'destroy'를 호출 할 수 있습니까? –

+1

초기화되지 않은 뮤텍스를 파괴하지 않는 것이 좋습니다. 'pthread_mutex_init()'와'pthread_mutex_destroy()'에 대한 호출을 추가하십시오. –

+1

그러나 pthread_mutex_init() 만 뮤텍스를 초기화하는 유일한 방법은 아닙니다. 'PTHREAD_MUTEX_INITIALIZER'로 초기화 할 수도 있습니다. 자세한 내용은 질문에서 링크 된 맨 페이지를 참조하십시오. –

관련 문제