我有两个运行如下的线程。该代码在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不消耗信号?为什么在模拟器和设备上有不同的行为?
答案 0 :(得分:0)
你是否已经深究这个或找到一个解决方法?我认为我在iPhone设备上挂在pthread_cond_wait上遇到了类似的问题。
条件在iOS模拟器上正确发出信号,但在iPhone上运行时会挂起。如果我暂停执行然后恢复,则满足条件并继续执行。
但我注意到,pthread_cond_wait的实现在不同的平台上是不同的。
iPhone:
libsystem_c.dylib'pthread_cond_wait
iOS模拟器:
libsystem_c.dylib'pthread_cond_wait $ UNIX2003