簡體   English   中英

C linux pthread線程優先級

[英]C linux pthread thread priority

我的程序有一個后台線程,用於填充和交換雙緩沖區實現的后台緩沖區。 主線程使用前端緩沖區發送數據。 問題是當我運行程序時,主線程平均獲得更多的處理時間。 我想要相反的行為,因為填充后台緩沖區是一個更耗時的過程,然后處理並向客戶端發送數據。

如何在Linux上使用C POSIX pthreads實現這一目標?

根據我的經驗,如果在沒有優先級的情況下你的主線程獲得更多CPU,那么這意味着以下兩件事之一:

  1. 它實際上需要額外的時間,與你的期望相反,或

  2. 后台線程正在飢餓,可能是由於鎖爭用

改變優先級不會解決其中任何一個問題。

看看pthread_setschedparam() - > http://www.kernel.org/doc/man-pages/online/pages/man3/pthread_setschedparam.3.html

pthread_setschedparam(pthread_t thread, int policy,
                         const struct sched_param *param);

您可以在sched_pa​​ram的sched_priority字段中設置優先級。

你應該看一下pthread_attr_t結構。 它作為參數傳遞給pthread_create函數。 它用於更改線程屬性,可以幫助您解決問題。

如果你無法解決它,你將不得不使用互斥鎖來阻止你的主線程在你的其他線程交換之前訪問你的緩沖區。

使用pthread_setschedprio(pthread_t thread, int priority) 但是在其他情況下(setschedparam或使用pthread_attr_t時),如果要更改優先級(如nice實用程序),則應在root下啟動進程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM