【Linux 内核】线程调度示例一 ③ ( 获取线程优先级 | 设置线程调度策略 | 代码示例 )
生活随笔
收集整理的這篇文章主要介紹了
【Linux 内核】线程调度示例一 ③ ( 获取线程优先级 | 设置线程调度策略 | 代码示例 )
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 一、獲取線程優先級
- 1、pthread_attr_setschedparam 和 pthread_attr_getschedparam 函數
- 2、獲取線程優先級代碼示例
- 二、設置線程調度策略
- 1、pthread_attr_setschedpolicy 函數
- 2、設置線程調度策略代碼示例
一、獲取線程優先級
1、pthread_attr_setschedparam 和 pthread_attr_getschedparam 函數
設置、獲取 線程 優先級的 核心 函數 :
① 設置 " 創建線程 " 的優先級 :
int pthread_attr_setschedparam(pthread_attr_t *attr, const struct sched_param *param)② 獲取 " 創建線程 " 的優先級 :
int pthread_attr_getschedparam(pthread_attr_t *attr, const struct sched_param *param)設置 struct sched_param *param 結構體的 sched_priority 字段 , 即可設置 " 優先級 " 屬性 ;
上述 222 個函數 , 如果執行成功 , 返回 000 ;
如果執行失敗 , 則返回錯誤代碼 :
- EINVAL : 屬性設置無效 ;
- ENOTSUP : 設置的屬性值不合法 ;
2、獲取線程優先級代碼示例
代碼示例 :
/*** @brief 獲取線程優先級* * @return int */ static int get_thread_priority(pthread_attr_t *p_attr){// 獲取調度參數struct sched_param param;// 獲取線程調度優先級int ret = pthread_attr_getschedparam(p_attr, ¶m);// 確保獲取優先級操作執行成功,如果執行失敗,則退出程序assert(ret == 0);printf("獲取的線程優先級為 %d\n", param.sched_priority);return param.sched_priority; }二、設置線程調度策略
1、pthread_attr_setschedpolicy 函數
創建 pthread 線程時 , 默認的線程時 SCHED_OTHHER 調度策略 , 可以通過下面的函數 , 修改調度策略 ;
修改線程 " 調度策略 " 函數 :
int pthread_attr_setschedpolicy(pthread_attr_t *attr, int policy);如果函數執行成功 , 返回 000 ;
如果函數執行失敗 , 返回錯誤代碼 :
- EINVALEINVAL : pthread_attr_t *attr 線程未初始化 , 或者 , int policy 不是有效調度策略 ;
- EFAULTEFAULT : pthread_attr_t *attr 指針無效 ;
- ENOTSUPENOTSUP : 嘗試將調度策略修改為 SCHED_FIFO 或 SCHED_RR 實時調度策略 ;
2、設置線程調度策略代碼示例
代碼示例 :
/*** @brief 設置線程調度策略* * @return int */ static int set_thread_policy(pthread_attr_t *p_attr, int policy){// 設置線程調度策略int ret = pthread_attr_setschedpolicy(p_attr, policy);// 確保獲取優先級操作執行成功,如果執行失敗,則退出程序assert(ret == 0);// 驗證線程是否設置調度策略成功, 打印調度策略get_thread_policy(p_attr);return 0; }總結
以上是生活随笔為你收集整理的【Linux 内核】线程调度示例一 ③ ( 获取线程优先级 | 设置线程调度策略 | 代码示例 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Linux 内核】线程调度示例一 ②
- 下一篇: 【Linux 内核 内存管理】RCU 机