2013-04-30 2 views
0

기존 C++ 프로젝트를 objective-C++로 포팅하고이 뮤텍스 항목을 발견했습니다. 나는 그것이 옳은 경우도 여기에서 끝난 것이 확실하지 않습니다.iOS에서 pthread_mutexattr_t 문제가 발생했습니다.

#include <pthread.h> 

pthread_mutex_t cs; 
pthread_mutexattr_t attr; 

나중에 코드 : 잠금 장치를 멀티 스레딩의 어떤 종류를 초기화하려면 다음을 수행 ("크리티컬 섹션"이라고도 함)

pthread_mutexattr_init(&attr); 
pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE); 
pthread_mutex_init(&cs, &attr); 

입력하려면 "잠금"이 :

pthread_mutex_lock(&cs); 

pthread_mutex_unlock(&cs); 
pthread_mutex_destroy(&cs); 
:

는 "고정"상태로 두려면

내 질문 (이후로 나는 이것이 어떻게되는지 전혀 모른다) : 올바른 구현처럼 보이나요? 잠금 메커니즘처럼 보이는 문제가 발생하기 때문에 (잘못된 메모리 액세스 오류, "CriticalSection"이 사용 된 상황에서 포인터가 손상됨).

답변

0

잠금 해제시 뮤텍스를 삭제하고 싶지 않다는 점을 제외하고는 정확합니다. 모든 쓰레드가 끝났음을 보장 할 수있을 때만 뮤텍스를 파괴하십시오. 예를 들어

:

class CriticalSection 
{ 
public: 
    CriticalSection() 
    { 
     pthread_mutexattr_t attr; 
     pthread_mutexattr_init(&attr); 
     pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE); 
     pthread_mutex_init(&mutex, &attr); 
    } 
    ~CriticalSection() { pthread_mutex_destroy(&mutex); } 
    void Enter() { pthread_mutex_lock(&mutex); } 
    void Leave() { pthread_mutex_unlock(&mutex); } 
private: 
    pthread_mutex_t mutex; 
}; 
관련 문제