在Linux中,可以使用pthread_attr_setschedpolicy()
和pthread_attr_setschedparam()
函數來設置線程的調度策略和優先級
#include<stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <sched.h>
#include <errno.h>
void* thread_function(void *arg) {
// 線程執行的代碼
}
int main() {
pthread_t thread;
pthread_attr_t attr;
struct sched_param param;
// 初始化線程屬性
if (pthread_attr_init(&attr) != 0) {
perror("pthread_attr_init");
exit(1);
}
// 設置線程調度策略為SCHED_FIFO(實時調度策略)
if (pthread_attr_setschedpolicy(&attr, SCHED_FIFO) != 0) {
perror("pthread_attr_setschedpolicy");
exit(1);
}
// 設置線程優先級
param.sched_priority = 99; // 范圍通常是1到99,具體取決于系統配置
if (pthread_attr_setschedparam(&attr, ¶m) != 0) {
perror("pthread_attr_setschedparam");
exit(1);
}
// 創建線程
if (pthread_create(&thread, &attr, thread_function, NULL) != 0) {
perror("pthread_create");
exit(1);
}
// 等待線程結束
if (pthread_join(thread, NULL) != 0) {
perror("pthread_join");
exit(1);
}
// 銷毀線程屬性
if (pthread_attr_destroy(&attr) != 0) {
perror("pthread_attr_destroy");
exit(1);
}
return 0;
}
注意:在設置線程優先級時,需要確保程序具有足夠的權限。通常情況下,只有root用戶或具有CAP_SYS_NICE權限的用戶才能設置線程優先級。如果沒有足夠的權限,pthread_attr_setschedparam()
函數將返回EPERM錯誤。