pthread_setschedparam在多執行緒開發中經常被使用的,它主要用於設定執行緒的調用策略和優先權。
基本介紹
- 中文名:pthread_setschedparam
- 外文名:dparam
- 類型:檔案名稱
- 性質:名詞
頭檔案,函式原形,功能,參數,
頭檔案
#include <pthread.h>
函式原形
int pthread_setschedparam(pthread_t target_thread, int policy, const struct sched_param *param)
功能
pthread_setschedparam在多執行緒開發中經常被使用的,它主要用於設定執行緒的調用策略和優先權。
參數
1. target_thread是使用pthread_create所獲得的執行緒ID。
2.執行緒的調度有三種策略:SCHED_OTHER、SCHED_RR和SCHED_FIFO。Policy用於指明使用哪種策略。下面我們簡單的說明一下這三種調度策略。
SCHED_OTHER
它是默認的執行緒分時調度策略,所有的執行緒的優先權別都是0,執行緒的調度是通過分時來完成的。簡單地說,如果系統使用這種調度策略,程式將無法設定執行緒的優先權。請注意,這種調度策略也是搶占式的,當高優先權的執行緒準備運行的時候,當前執行緒將被搶占並進入等待佇列。這種調度策略僅僅決定執行緒在可運行執行緒佇列中的具有相同優先權的執行緒的運行次序。
SCHED_FIFO
它是一種實時的先進先出調用策略,且只能在超級用戶下運行。這種調用策略僅僅被使用於優先權大於0的執行緒。它意味著,使用SCHED_FIFO的可運行執行緒將一直搶占使用SCHED_OTHER的運行執行緒J。此外SCHED_FIFO是一個非分時的簡單調度策略,當一個執行緒變成可運行狀態,它將被追加到對應優先權佇列的尾部((POSIX 1003.1)。當所有高優先權的執行緒終止或者阻塞時,它將被運行。對於相同優先權別的執行緒,按照簡單的先進先運行的規則運行。我們考慮一種很壞的情況,如果有若干相同優先權的執行緒等待執行,然而最早執行的執行緒無終止或者阻塞動作,那么其他執行緒是無法執行的,除非當前執行緒調用如pthread_yield之類的函式,所以在使用SCHED_FIFO的時候要小心處理相同級別執行緒的動作。
SCHED_RR
鑒於SCHED_FIFO調度策略的一些缺點,SCHED_RR對SCHED_FIFO做出了一些增強功能。從實質上看,它還是SCHED_FIFO調用策略。它使用最大運行時間來限制當前進程的運行,當運行時間大於等於最大運行時間的時候,當前執行緒將被切換並放置於相同優先權佇列的最後。這樣做的好處是其他具有相同級別的執行緒能在“自私“執行緒下執行。
3.param是struct sched_param類型的指針,它僅僅包含一個成員變sched_priority,指明所要設定的靜態執行緒優先權。