2012-05-01 1 views
3

다음과 같이 두 개의 스레드가 실행 중입니다. 이 코드는 iPhone 시뮬레이터에서 완벽하게 작동하지만 기기에서는 작동하지 않습니다. iPhone (ios 5.1 실행)에서 스레드 A 신호는 조건이지만 스레드 B는 무한정 조건을 기다리고 있습니다. 데이터가 처리 할 준비가 스레드 A에서iPhone - 기다리고있는 스레드의 차단을 해제하지 않은 상태 신호를 내 보냅니다.

: 스레드 B에서

pthread_mutex_lock(&mutex); 
outstandingSig++; 
pthread_cond_signal(&condVar); 
pthread_mutex_unlock(&mutex); 

:

while(1) 
{ 
    pthread_mutex_lock(&mutex); 
    while(outstandingSig == 0) 
    { 
    pthread_cond_wait(&condVar, &mutex); 
    } 

    outstandingSig = 0; //Reset outstanding signals 
    pthread_mutex_unlock(&mutex); 

// process data 
} 

왜 장치에 다르게 행동 상관 없음 제안? 스레드 B가 신호를 소비하지 않게하는 원인은 무엇입니까? 그리고 시뮬레이터와 장치에서 왜 다른 동작을합니까?

답변

0

맨 아래로 이동 했습니까? 해결 방법을 찾으셨습니까? 나는 iPhone 장치의 pthread_cond_wait에 매달리는 것과 비슷한 문제가 있다고 생각합니다.

상태는 iOS 시뮬레이터에서 올바르게 전달되지만 iPhone에서 실행 중일 때 중단됩니다. 실행을 일시 중지했다가 다시 시작하면 조건이 충족되고 실행이 계속됩니다.

그러나 pthread_cond_wait의 구현은 플랫폼에 따라 다릅니다.

아이폰 :

libsystem_c.dylib'pthread_cond_wait

iOS 시뮬레이터 :

도움이 $는 Unix2003

+0

은 GDB 디버거 변경 libsystem_c.dylib'pthread_cond_wait . 희망이 당신을 위해 작동합니다. 다른 솔루션을 발견 한 경우 게시하십시오. – user1368045

관련 문제