1

我有这个问题:

  • 我有一个使用一些线程的 C++ 代码。这些线程是 pthread 类型的。
  • 在我的 iPhone 应用程序中,我使用NSOperationQueue了一些 C++ 代码。

问题是这样的:C++ pthread 的优先级总是低于NsOperationQueue.

我怎样才能解决这个问题?我也试图给予低优先级,NSOpertionQueue但这个修复不起作用。

4

1 回答 1

1

如果您不得不求助于调整优先级(特别是向上),这通常表明并发模型中存在设计缺陷。这应该保留用于非常特殊的情况,例如实时线程(例如音频播放)。

首先评估你的线程和任务是如何运作的,并确保你别无选择。通常,您可以做一些简单的事情,例如减少操作队列的最大操作数、减少总线程数,或者按任务所需的资源对任务进行分组。

您使用什么方法来确定线程的优先级?

另请注意,设置操作的优先级会影响排队操作的顺序(而不是线程本身)。

我一直能够通过调整分布来解决这个问题。你现在应该停止阅读:)


可用,但不推荐:

要降低操作的优先级,您可以在操作中处理它main

- (void)main
{
  @autorelease {
    const double priority = [NSThread threadPriority];
    const bool isMainThread = [NSThread isMainThread];
    if (!isMainThread) {
      [NSThread setThreadPriority:priority * 0.5];
    }

    do_your_work_here

    if (!isMainThread) {
      [NSThread setThreadPriority:priority];
    }
  }
}

如果你真的需要在这之后推送内核,那么你可以设置 pthread 的优先级:

具有实时优先级的 pthread

如何提高 pthreads 中的线程优先级?

于 2012-04-27T12:43:00.690 回答