我有两个线程运行如下。该代码在 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 不使用信号?为什么模拟器和设备上的行为不同?