3

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

4

1 回答 1

0

您是否找到了问题的根源或找到了解决方法?我认为我在 iPhone 设备上挂起 pthread_cond_wait 时遇到了类似的问题。

该条件在 iOS 模拟器上正确发出信号,但在 iPhone 上运行时挂起。如果我暂停执行然后恢复,则满足条件并继续执行。

但是我确实注意到, pthread_cond_wait 的实现在不同的平台上是不同的。

苹果手机:

libsystem_c.dylib'pthread_cond_wait

iOS模拟器:

libsystem_c.dylib'pthread_cond_wait$UNIX2003

于 2012-07-24T08:29:23.557 回答