2012-04-27 163 views
1

我有這樣的問題:NSOperationQueue VS並行線程的優先級

  • 我有一些使用線程的C++代碼。這些線程是pthread類型。我使用NSOperationQueue和一些C++代碼。

問題是這樣的:C++ pthread的優先級總是低於NsOperationQueue

我該如何解決這個問題?我也試圖給NSOpertionQueue低優先級,但此修復程序不起作用。

回答

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的優先級:

pthreads with real time priority

How to increase thread priority in pthreads?