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

原创 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...
  • u012007928
  • u012007928
  • 2014年10月16日 09:46
  • 1142

java线程优先级设置

线程的优先级将该线程的重要性传递给了调度器。优先权不会导致死锁(产生死锁的必要条件是互斥,请求保持条件,不剥夺条件,环路等待条件),绝大多数时间里面,线程都应该以默认的优先级运行。在下面的示例中,你可...
  • Nice789987
  • Nice789987
  • 2013年12月12日 20:46
  • 761

线程优先级只使用三个等级

线程的优先级(Priority)决定了线程获得CPU运行的机会,优先级越髙获得的运行机 会越大,优先级越低获得的机会越小。Java的线程有10个级别(准确地说是11个级别,级 别为〇的线程是JVM的,...
  • lexang1
  • lexang1
  • 2015年11月17日 12:42
  • 2268

C++11的线程类,创建的线程,如何设置优先级?

SetThreadPriority The SetThreadPriority function sets the priority value for the specified thread. ...
  • qicheng11111
  • qicheng11111
  • 2014年12月26日 19:21
  • 1105

多线程_线程调度及获取和设置线程优先级

package cn.itcast_04; /* * 我们的线程没有设置优先级,肯定有默认优先级。 * 那么,默认优先级是多少呢? * 如何获取线程对象的优先级? * public fi...
  • L1585931143
  • L1585931143
  • 2017年03月08日 23:53
  • 554

(转)android 设置线程的优先级

一、有两处API可以设置线程的优先级: 1、android.os.Process.setThreadPriority (int priority)       或      android.os...
  • Navagate
  • Navagate
  • 2015年05月11日 17:14
  • 1979

如何在linux/unix中设置线程的优先级

如何在linux/unix中设置线程的优先级  在linux下我们可以通过int pthread_create(pthread_t *thread, const pthread_attr_t *att...
  • nicholasmaxwell
  • nicholasmaxwell
  • 2007年10月30日 11:35
  • 11384

Linux编程-线程优先级的设定

By:Ailson Jack       Date:2016.04.04       个人博客:www.only2fire.com       本文在我博客的地址是:http://w...
  • jackailson
  • jackailson
  • 2016年04月04日 19:50
  • 2412

java—更改线程的优先级

查看和修改线程的优先级 java中每一个线程都有优先级属性,在默认情况下,新建的线程的优先级与创建该线程的线程优先级相同。 每当线程调度器选择要运行的线程时,通常选择优先级较高的线程。 ...
  • Clovemeo
  • Clovemeo
  • 2017年03月27日 16:21
  • 585

Ios开发:改变线程优先级

简介每个线程执行时都具有一定的优先级,对于UI线程的优先级约为0.75,对于新创建的子线程的默认优先级为0.5,对于优先级高的则会获得较高的执行的机会,为大家介绍一下怎样改变线程的优先级程序说明新建一...
  • xiaobenyaoyangguang
  • xiaobenyaoyangguang
  • 2016年06月03日 21:21
  • 859
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:设置线程优先级和调度算法的实例
举报原因:
原因补充:

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