#include
<stdio.h> #include
<pthread.h> #include
<sched.h> #include
<assert.h>
static int get_thread_policy(pthread_attr_t
*attr) { int policy; int rs =
pthread_attr_getschedpolicy(attr,&policy); assert(rs==0); switch(policy) { case SCHED_FIFO: printf("policy= SCHED_FIFO\n"); break; case SCHED_RR: printf("policy= SCHED_RR"); break; case SCHED_OTHER: printf("policy=SCHED_OTHER\n"); break; default: printf("policy=UNKNOWN\n"); break; } return policy; }
static void show_thread_priority(pthread_attr_t
*attr,int policy) { int priority = sched_get_priority_max(policy); assert(priority!=-1); printf("max_priority=%d\n",priority);
priority= sched_get_priority_min(policy); assert(priority!=-1); printf("min_priority=%d\n",priority); }
static int get_thread_priority(pthread_attr_t
*attr) { struct sched_param param; int rs =
pthread_attr_getschedparam(attr,¶m); assert(rs==0); printf("priority=%d",param.__sched_priority); return param.__sched_priority; }
static void set_thread_policy(pthread_attr_t
*attr,int policy) { int rs =
pthread_attr_setschedpolicy(attr,policy); assert(rs==0);
get_thread_policy(attr); }
int main(void) { pthread_attr_t attr; struct sched_param sched; int rs;
rs = pthread_attr_init(&attr); assert(rs==0);
int policy = get_thread_policy(&attr); printf("Show current configuration of priority\n");
show_thread_priority(&attr,policy); printf("show SCHED_FIFO of priority\n");
show_thread_priority(&attr,SCHED_FIFO); printf("show SCHED_RR of priority\n");
show_thread_priority(&attr,SCHED_RR); printf("show priority of current thread\n"); int priority = get_thread_priority(&attr);
printf("Set thread policy\n"); printf("set SCHED_FIFO policy\n");
set_thread_policy(&attr,SCHED_FIFO); printf("set SCHED_RR policy\n");
set_thread_policy(&attr,SCHED_RR); printf("Restore current policy\n");
set_thread_policy(&attr,policy);
rs = pthread_attr_destroy(&attr); assert(rs==0); return 0; }
|
相关推荐
基于linux的进程调度,熟知linux的调度方式和如何设置进程和线程调度。本文偏重于理论的讲解!
在Linux环境下实现任务调度仿真,利用多线程实现任务池中的多个任务,支持先来先服务、轮转和反馈三种调度策略 设有任务A、B、C、D、E,分别具有不同的优先级和处理时间,通过一个调度线程对这5个任务进行调度。 1....
2、线程包含了表示进程内执行环境必须的信息,包括线程ID、一组寄存器、栈、调度优先级、策略、信号屏蔽字、errno变量、线程私有数据。 3、测试是否支持POSIX线程: 使用编译测试宏_POSIX_THREADS 调用sysconf,运行...
在Linux环境下实现任务调度仿真,利用多线程实现任务池中的多个任务,支持先来先服务、轮转和反馈三种调度策略 设有任务A、B、C、D、E,分别具有不同的优先级和处理时间,通过一个调度线程对这5个任务进行调度。 1...
Linux作为一个通用操作系统,主要考虑的是调度的...同时也提供了符合POSIX标准的调度策略,包括FIFO调度策略、时间片轮转调度策略和静态优先级抢占式调度策略。Linux区分实时进程和普通进程,并采用不同的调度策略。
Linux2.4.x是一个基于非抢占式的多任务的分时操作系统,虽然在用户进程的调度上采用抢占式策略,但是而在内核还是采用了轮转的方法,如果有个内核态的线程恶性占有CPU不释放,那系统无法从中解脱出来,所以实时性并...
Linux2.4.x是一个基于非抢占式的多任务的分时操作系统,虽然在用户进程的调度上采用抢占式策略,但是而在内核还是采用了轮转的方法,如果有个内核态的线程恶性占有CPU不释放,那系统无法从中解脱出来,所以实时性并...
5.2.2 Linux内核的实现策略 200 5.3 中断描述符表的初始化 204 5.3.1 中断描述符表的初步初始化 204 5.3.2 中断描述符表的最终初始化 206 5.4 具体处理过程 216 5.4.1 公用的硬件处理阶段 217 5.4.2 ...
5.2.2 Linux内核的实现策略 200 5.3 中断描述符表的初始化 204 5.3.1 中断描述符表的初步初始化 204 5.3.2 中断描述符表的最终初始化 206 5.4 具体处理过程 216 5.4.1 公用的硬件处理阶段 217 5.4.2 ...
5.2.2 Linux内核的实现策略 200 5.3 中断描述符表的初始化 204 5.3.1 中断描述符表的初步初始化 204 5.3.2 中断描述符表的最终初始化 206 5.4 具体处理过程 216 5.4.1 公用的硬件处理阶段 217 5.4.2 ...
5.2.2 Linux内核的实现策略 200 5.3 中断描述符表的初始化 204 5.3.1 中断描述符表的初步初始化 204 5.3.2 中断描述符表的最终初始化 206 5.4 具体处理过程 216 5.4.1 公用的硬件处理阶段 217 5.4.2 ...
5.2.2 Linux内核的实现策略 200 5.3 中断描述符表的初始化 204 5.3.1 中断描述符表的初步初始化 204 5.3.2 中断描述符表的最终初始化 206 5.4 具体处理过程 216 5.4.1 公用的硬件处理阶段 217 5.4.2 ...
5.2.2 Linux内核的实现策略 200 5.3 中断描述符表的初始化 204 5.3.1 中断描述符表的初步初始化 204 5.3.2 中断描述符表的最终初始化 206 5.4 具体处理过程 216 5.4.1 公用的硬件处理阶段 217 5.4.2 ...
5.2.2 Linux内核的实现策略 200 5.3 中断描述符表的初始化 204 5.3.1 中断描述符表的初步初始化 204 5.3.2 中断描述符表的最终初始化 206 5.4 具体处理过程 216 5.4.1 公用的硬件处理阶段 217 5.4.2 ...
5.2.2 Linux内核的实现策略 200 5.3 中断描述符表的初始化 204 5.3.1 中断描述符表的初步初始化 204 5.3.2 中断描述符表的最终初始化 206 5.4 具体处理过程 216 5.4.1 公用的硬件处理阶段 217 5.4.2 ...
7.6.1 POSIX的线程调度策略 181 7.6.2 POSIX Thread优先级 181 7.7 小结 181 第8章 POSIX Socket API:面向连接的通信 183 8.1 Echo Socket示例应用 183 8.1.1 Echo Android应用项目 184 8.1.2 抽象echo ...
本书是一本关于操作系统的基本概念、基本方法、设计原理和实现技术的教材,目的是尽可能系统、清晰、全面、综合地展示当代操作系统的概念、特点、本质和精髓。全书共分八章,每章的最后一节是小结,涉及的内容有:CH...
与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。...
与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。...