線程函數中使用setpriority函數的作用


setpriority函數是用來設置進程優先級的,在線程函數中使用是設置什么的優先級呢?
例如:

int av_encode_audio_thread(void *arg)
{
     setpriority(PRIO_PROCESS, getpid(), -10);  (1)
    ......
}

int av_encode_video_thread(ThreadInfo_T *threadInfo)
{
    //創建音頻編碼線程
    SDL_CreateThread(av_encode_audio_thread, threadInfo);

     setpriority(PRIO_PROCESS, getpid(), -15);  (2)

    ......
}

int main()
{
    av_encode_video_thread(current_stream);
}

在上面的例子中,似乎av_encode_video_thread和av_encode_audio_thread兩個函數分別屬於兩個線程,那(1)(2)處的兩次優先級設置究竟是設置誰的優先級,我感覺應該是設置av_encode_video_thread和av_encode_audio_thread兩個線程的優先級,但為什么要用setpriority函數?希望得到大俠們的指點!謝謝!
另外,我在(1)(2)處打印了getpid()的值,發現兩個值不相同,是不是意味着av_encode_video_thread和av_encode_audio_thread兩個函數分屬不同進程?

4 个解决方案

#1


引用樓主 mediaworker 的回復:
setpriority函數是用來設置進程優先級的,在線程函數中使用是設置什么的優先級呢?
 例如:

 int av_encode_audio_thread(void *arg)
 {
setpriority(PRIO_PROCESS, getpid(), -10);  (1)
     ......
 }

 int av_encode_video_thread(ThreadInfo_T *threadInfo)
 {
     //創建音頻編碼線程
     SDL_CreateThread(av_encode_audio_thread, threadInfo);

setpriority(PRIO_PROCESS, getpid(), -15);  (2)

     ......
 }

 int main()
 {
     av_encode_video_thread(current_stream);
 }

 在上面的例子中,似乎av_encode_video_thread和av_encode_audio_thread兩個函數分別屬於兩個線程,那(1)(2)處的兩次優先級設置究竟是設置誰的優先級,我感覺應該是設置av_encode_video_thread和av_encode_audio_thread兩個線程的優先級,但為什么要用setpriority函數?希望得到大俠們的指點!謝謝!
 另外,我在(1)(2)處打印了getpid()的值,發現兩個值不相同,是不是意味着av_encode_video_thread和av_encode_audio_thread兩個函數分屬不同進程?

LZ自己已經回答的很清楚的,吼吼

#2


我只是做了一些猜測,但是不明白(1)(2)處到底設置的是線程的優先級還是進程的優先級?為什么av_encode_video_thread和av_encode_audio_thread兩個函數分屬不同進程而不是線程?

#3


引用樓主 mediaworker 的回復:
setpriority函數是用來設置進程優先級的,在線程函數中使用是設置什么的優先級呢?
 例如:

 int av_encode_audio_thread(void *arg)
 {
setpriority(PRIO_PROCESS, getpid(), -10);  (1)
     ......
 }

 int av_encode_video_thread(ThreadInfo_T *threadInfo)
 {
     //創建音頻編碼線程
     SDL_CreateThread(av_encode_audio_thread, threadInfo);

setpriority(PRIO_PROCESS, getpid(), -15);  (2)

     ......
 }

 int main()
 {
     av_encode_video_thread(current_stream);
 }

 在上面的例子中,似乎av_encode_video_thread和av_encode_audio_thread兩個函數分別屬於兩個線程,那(1)(2)處的兩次優先級設置究竟是設置誰的優先級,我感覺應該是設置av_encode_video_thread和av_encode_audio_thread兩個線程的優先級,但為什么要用setpriority函數?希望得到大俠們的指點!謝謝!
 另外,我在(1)(2)處打印了getpid()的值,發現兩個值不相同,是不是意味着av_encode_video_thread和av_encode_audio_thread兩個函數分屬不同進程?

首先,在Linux下的線程是輕量級的進程,每個線程都有自己的進程ID,但是共享了內存等。所以,使用getpid()看到不同的進程ID。

因為每個線程都有自己的task_struct信息,該信息存儲了優先級,所以我猜設置的應該是線程的優先級。

#4


在kernel里進程線程實際上並沒有太大的區別,在內核看來都是進程,只是mm_struct是否是共享的.而linux kernel的調度就是以這個進程為單位來進行了,所以你這里的兩個線程對內核調度程序來說還是兩個進程.
所以這里在每個線程里面都要設置優先級.

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com