Linux_Thread_week5
- 格式:pdf
- 大小:98.55 KB
- 文档页数:18


Linux内核的三种调度策略:
1,SCHED_OTHER 分时调度策略,
2,SCHED_FIFO实时调度策略,先到先服务.一旦占用cpu则一直运行.一直运行直到有更高优先级任务到达或自己放弃
3,SCHED_RR实时调度策略,时间片轮转.当进程的时间片用完,系统将重新分配时间片,并置于就绪队列尾.放在队列尾保证了所有具有相同优先级的RR任务的调度公平
Linux线程优先级设置
,可以通过以下两个函数来获得线程可以设置的最高和最低优先级,函数中的策略即上述三种策略的宏定义:
int sched_get_priority_max(int policy);
int sched_get_priority_min(int policy);
SCHED_OTHER是不支持优先级使用的,而SCHED_FIFO和SCHED_RR支持优先级的使用,他们分别为1和99,数值越大优先级越高.
设置和获取优先级通过以下两个函数:
int pthread_attr_setschedparam(pthread_attr_t *attr, const struct sched_param *param);
int pthread_attr_getschedparam(const pthread_attr_t *attr, struct sched_param *param);
例如以下代码创建了一个优先级为10的线程:
struct sched_param
{
int __sched_priority; //所要设定的线程优先级
};
例:创建优先级为10的线程
pthread_attr_t attr;
struct sched_param param;
pthread_attr_init(&attr);
pthread_attr_setschedpolicy(&attr, SCHED_RR);
linux创建线程之pthread_create的具体使⽤
pthread_create函数
函数简介
pthread_create是UNIX环境创建线程函数
头⽂件
#include
函数声明
int pthread_create(pthread_t *restrict tidp,const pthread_attr_t *restrict_attr,void*(*start_rtn)(void*),void *restrict arg);
返回值
若成功则返回0,否则返回出错编号
参数
第⼀个参数为指向线程标识符的指针。
第⼆个参数⽤来设置线程属性。
第三个参数是线程运⾏函数的地址。
最后⼀个参数是运⾏函数的参数。
注意
在编译时注意加上-lpthread参数,以调⽤静态链接库。因为pthread并⾮Linux系统的默认库。
pthread_join函数
函数简介
函数pthread_join⽤来等待⼀个线程的结束。
函数原型为:
extern int pthread_join __P (pthread_t __th, void **__thread_return);
参数:
第⼀个参数为被等待的线程标识符
第⼆个参数为⼀个⽤户定义的指针,它可以⽤来存储被等待线程的返回值。
注意
这个函数是⼀个线程阻塞的函数,调⽤它的函数将⼀直等待到被等待的线程结束为⽌,当函数返回时,被等待线程的资源被
收回。如果执⾏成功,将返回0,如果失败则返回⼀个错误号。
例⼦:
#include
#include
#include
/* 声明结构体 */
struct member
{
int num;
char *name;
};
/* 定义线程pthread */
static void * pthread(void *arg){
struct member *temp;
/* 线程pthread开始运⾏ */
printf("pthread start!\n");
- 1 - linux 线程休眠函数
Linux线程休眠函数是一种用于暂停线程执行的函数,它可以帮助程序员在需要等待某些事件发生时,避免CPU空转浪费资源。Linux线程休眠函数包括sleep、usleep、nanosleep、select、poll等,每种函数都有不同的使用场景和特点。
其中,sleep函数可以使线程休眠指定的时间,单位为秒;usleep函数可以使线程休眠指定的时间,单位为微秒;nanosleep函数可以使线程休眠指定的时间,单位为纳秒。这三种函数都会使线程进入阻塞状态,等待休眠时间到达后,线程会被唤醒并继续执行。
select和poll函数则是用于等待某些文件描述符上的事件发生,例如可读、可写或异常事件。这两种函数都是非阻塞的,可以在等待期间继续执行其他任务,直到有事件发生时才会返回。
除了以上提到的函数,Linux系统还提供了许多其他线程休眠函数,如sched_yield、pthread_cond_wait、sem_wait等,每种函数都有不同的使用场景和特点。程序员应该根据具体需求选择适当的线程休眠函数,以保证程序的高效运行。
【linux】Linux-pthread如何设置线程的优先级
设置线程优先级的函数:
int pthread_setschedparam(pthread_t target_thread, int policy, const struct sched_param *param)
它主要⽤于设置线程的调⽤策略和优先级。
参数说明:
1. target_thread是使⽤所获得的线程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调⽤策