设置线程优先级和调度算法的实例

原创 2012年03月27日 07:11:42

/*设置线程优先级和调度算法的实例*/
#include<stdio.h>
#include<pthread.h>

void *thread_one_info(void)
{
 int i;
 for(i = 0; i < 5; i ++)
 {
  printf("in thread1, sleep...\n");
  sleep(1);
 }
 printf("thread %ld:in thread_one——info function\n", (long)pthread_self());
}

void * thread_two_info(void)
{
 int i;
 for(i = 0; i < 5; i ++)
 {
  printf("in thread2 , sleep ...\n");
  sleep(1);

 }
 printf("thread %ld: in thread_two_info function\n ",(long)pthread_self());
}

int main(int argc, char * argv[])
{
 pthread_t thread_id1, thread_id2;
 int ret;
 struct sched_param param1, param2;
 int num1, num2;
 
 if(argc != 3)
 {
  printf("Usage: %s thread_one_priority thread_two_priority \n",argv[0]);
  return 1;
 }

 num1 = atoi(argv[1]);
 num2 = atoi(argv[2];
 
 pthread_attr_t attr_obj1;
 pthread_attr_t attr_obj2;

 //初始化线程属性对象
 pthread_attr_init(&attr_obj1);
 pthread_attr_init(&attr_obj2);

 //获得线程属性对象的优先级
 ret = pthread_attr_getschedparam(&attr_obj1, &param1);
 if(ret !=  0)
 {
  printf("obj1: cannot get schedule parameters");
  return 1;
 }

 ret = pthread_attr_getschedparam(&attr_obj2, &param2);
 if(ret !=  0)
 {
  printf("obj2: cannot get schedule parameters");
  return 1;
 }

 //输出优先级信息
 printf("obj1:thread priority : %d \n", param1.sched_priority);
 printf("obj2:thread priorty : %d \n", param2.sched_priority);

 //更改线程优先级
 param.sched_priority  = num1;
 param.sched_priority = num2;

 printf("=====now thread priority===");
 printf("obj1:thread priority : %d\n",param1.sched_priority);
 printf("obj2: thread priority : %d\n",param2.sched_priority);

 //设置线程的调度优先级
 ret = pthread_attr_setschedparam(&attr_obj1, &param1);
 if(ret != 0)
 {
  printf("obj1: cannot set schedule parameters");
  return 1;
 }

 ret = pthread_attr_setschedparam(&attr_obj2, &param2);
 if(ret != 0)
 {
  printf("obj2: cannot set schedule parameters");
  return 1;
 }

 //设置调度作用域
 ret = pthread_attr_setscope(&attr_obj1, PTHREAD_SCOPE_SYSTEM);
 if(ret != 0)
 {
  printf("obj1: cannot set schedule scope");
  return 1;
 }

 ret = pthread_attr_setscope(&attr_obj2, PTHREAD_SCOPE_SYSTEM);
 if(ret != 0)
 {
  printf("obj2: cannot set schedule scope");
  return 1;
 }

 //设置调度策略
 ret = pthread_attr_setschedpolicy(&attr_obj1, SCHED_RR);
 {
  printf("obj1: cannot set schedule policy");
  return 1;
 }

 ret = pthread_attr_setschedpolicy(&attr_obj2, SCHED_RR);
 {
  printf("obj2: cannot set schedule policy");
  return 1;
 }
 
 //创建新的线程
 ret = pthread_creare(&pthread_id1, &attr_obj1, (void *)thread_one_info,NULL);
 if(ret != -1)
 {
  printf("cannot create new thread1");
  return 1;
 }

 ret = pthread_creare(&pthread_id2, &attr_obj2, (void *)thread_one_info,NULL);
 if(ret != -1)
 {
  printf("cannot create new thread1");
  return 1;
 }

 //连接线程
 pthread_join(thread_id1, NULL);
 pthread_join(thread_id2, NULL);

 return 0;
}

相关文章推荐

线程调度算法和优先级

函数pthread_attr_setschedpolicy和pthread_attr_getschedpolicy分别用来设置和得到线程的调度策略。 名称:: pthrea...

非抢占式优先级调度算法

  • 2015年12月23日 08:18
  • 23KB
  • 下载

linux内核调度算法(1)--快速找到最高优先级进程

为什么要了解内核的调度策略呢?呵呵,因为它值得我们学习,不算是废话吧。内核调度程序很先进很强大,管理你的LINUX上跑的大量的乱七八糟的进程,同时还保持着对用户操作的高灵敏响应,如果可能,为什么不把这...

优先级调度算法

  • 2015年05月13日 23:05
  • 2KB
  • 下载

操作系统——动态优先级调度算法源代码

摘要: 多道系统中多进程并发执行,为了提高系统性能解决进程死锁问题,进程的优先级是动态变化的。正在执行的进程优先级会随时间降低,而挂起的进程或等待的进程的优先级会逐渐升高,这样就解决了操作系统中一个...

处理器优先级调度算法

  • 2012年02月12日 13:49
  • 3KB
  • 下载

优先级调度算法(PSA)

优先级调度算法,即给每个作业一个优先级,优先级越高越紧迫,应该先执行。 FCFS算法和SJF算法都可以看做一种特殊的PSA算法。 例如,在FCFS算法里,是将算法的到达时间当做优先级,先到达的优先...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:设置线程优先级和调度算法的实例
举报原因:
原因补充:

(最多只允许输入30个字)