2012-05-01 53 views
3

我有兩個線程運行如下。該代碼在iPhone模擬器上完美工作,但不在設備上。在iPhone上(有ios 5.1運行)的線程A條件的信號,但線程B無限期地等待條件。iPhone - 線程狀態信號沒有解除阻塞等待線程

在線程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不消耗信號?以及爲什麼模擬器和設備上的不同行爲?

回答

0

你有沒有找到解決辦法或找到解決辦法?我想我在掛起iPhone設備上的pthread_cond_wait時遇到了類似的問題。

該條件在iOS模擬器上正確發出信號,但在iPhone上運行時掛起。如果我暫停執行然後恢復,則條件滿足並繼續執行。

但我注意到,pthread_cond_wait的實現在不同的平臺上有所不同。

iPhone:

libsystem_c.dylib'pthread_cond_wait

iPhone模擬器:

libsystem_c.dylib'pthread_cond_wait $ UNIX2003

+0

調試器更改爲GDB幫助。希望對你有效。如果您確實遇到另一種解決方案,請發帖 – user1368045