2012-05-01 11 views
3

次のように2つのスレッドが実行されています。このコードは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の実装はプラットフォームによって異なります。

iPhone:

libsystem_c.dylib'pthread_cond_wait

iOSシミュレータ:

は、GDBにデバッガを変更する$ UNIX2003

+0

をlibsystem_c.dylib'pthread_cond_wait助けました。あなたのために働くことを願っています。あなたが別の解決策に出くわしたら、投稿してください – user1368045

関連する問題