Example #1
0
/*************************************************
  * Function:		Pthread_attr_setschedpriority()
  * Description:    设置线程优先级包裹函数 
  * Input:          *attr---线程属性结构 
  					inheritsched---线程优先级参数
  * Output:         *attr---线程属性结构
  * Return:         0/errno 
*************************************************/
int Pthread_attr_setschedpriority(pthread_attr_t *attr, int priority)
{
	struct sched_param	params;
	int maxPriority, minPriority;
	int rval;
	
	if(attr==AII_NULL)
	{
		return -1;	
	}

	/*检查用户设置的优先级合法性*/
	rval = Pthread_get_priorityscope(SCHED_RR, &minPriority, &maxPriority);
	if (rval != 0)
	{
		return rval;
	}	
	//debug_info(DEBUG_LEVEL_1,"pthread sched policy range is %d---%d\n", minPriority, maxPriority);
	if (priority < minPriority)
	{
		priority = minPriority;
	}
	else if (priority > maxPriority)
	{
		priority = maxPriority;
	}

	/*获取线程默认调度参数*/
	rval = Pthread_attr_getschedparam(attr, &params);
	if (rval != 0)
	{
		return rval;
	}

	/*修改线程优先级,设置线程调度属性*/
	params.sched_priority = priority;
	rval = Pthread_attr_setschedparam(attr, &params);
	if (rval != 0)
	{
		return rval;
	}

	return rval;
}
Example #2
0
/*************************************************
  * Function:		Pthread_attr_getschedpriority()
  * Description:    获取线程优先级包裹函数 
  * Input:          *attr---线程属性结构 
  * Output:         *priority---线程优先级参数 
  * Return:         0/errno 
*************************************************/
int Pthread_attr_getschedpriority(const pthread_attr_t *attr, int *priority)
{
	struct sched_param	params;
	int rval;

	if(attr==AII_NULL || priority==AII_NULL)
	{
		return -1;	
	}

	rval = Pthread_attr_getschedparam(attr, &params);
	if (rval != 0)
	{
		return rval;
	}

	*priority = params.sched_priority;

	return rval;
}
Example #3
0
int
main(int argc, char **argv)
{
	int n, scope;
	pthread_t t;
	pthread_attr_t attr;
	struct sched_param param;
	unsigned seed = 1;

	Pthread_attr_init(&attr);
	if (argc == 1) {
		printf("PTHREAD_SCOPE_PROCESS\n");
		Pthread_attr_setscope(&attr, PTHREAD_SCOPE_PROCESS);
	}
	else {
		printf("PTHREAD_SCOPE_SYSTEM\n");
		Pthread_attr_setscope(&attr, PTHREAD_SCOPE_SYSTEM);
	}

	Pthread_attr_getschedparam(&attr, &param);
	printf("sched_priority %d\n", param.sched_priority);

	Pthread_mutex_lock(&m);

	for (n = 0; n < 20; ++n) {
		param.sched_priority = rand_r(&seed) % 128;

		printf("creating thread %02d prio %02d\n", 
			n, param.sched_priority);
		Pthread_attr_setschedparam(&attr, &param);
     		Pthread_create(&t, &attr, Thread, (void *)n);
	}

	sleep(1);
	Pthread_mutex_unlock(&m);

	pthread_exit(NULL);
}