次のように2つのスレッドを実行しています。コードは iPhone シミュレーターでは完全に機能しますが、デバイスでは機能しません。iPhone (ios 5.1 が実行されている) では、スレッド A が条件を通知しますが、スレッド B は条件を無期限に待機しています。
スレッド A で、データを処理する準備ができたとき:
pthread_mutex_lock(&mutex);
outstandingSig++;
pthread_cond_signal(&condVar);
pthread_mutex_unlock(&mutex);
スレッド B:
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 がシグナルを消費しない原因は何ですか? また、シミュレーターとデバイスで動作が異なるのはなぜですか?