iPhone -Pthread条件信号没有解锁等待线程

时间:2012-05-01 15:50:31

标签: iphone ios

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

1 个答案:

答案 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