다음과 같이 두 개의 스레드가 실행 중입니다. 이 코드는 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가 신호를 소비하지 않게하는 원인은 무엇입니까? 그리고 시뮬레이터와 장치에서 왜 다른 동작을합니까?
은 GDB 디버거 변경 libsystem_c.dylib'pthread_cond_wait . 희망이 당신을 위해 작동합니다. 다른 솔루션을 발견 한 경우 게시하십시오. – user1368045