线程详解

//线程详解
设置调度方式
int pthread_attr_setschedpolicy(pthread_attr_t *attr, int policy);
int pthread_attr_getschedpolicy(pthread_attr_t *attr, int *policy);
SCHED_OTHER  默认,使用此种方式,线程不可以设置优先级
SCHED_FIFO   实时,可以设置优先级,先到先服务。一旦占用cpu则一直运行。一直运行直到有更高优先级任务到达或自己放弃
SCHED_RR     实时,轮转,可以设置优先级,当进程的时间片用完,系统将重新分配时间片,并置于就绪队列尾。放在队列尾保证了所有具有相同优先级的RR任务的调度公平
实验结果显示优先级高的不一定会先执行完, 控制线程的运行还是用信号量比较可靠
int sched_get_priority_max(int policy);
int sched_get_priority_min(int policy);
获取优先级的最大与最小值

int pthread_attr_setinheritsched(pthread_attr_t *attr,int inheritsched);
int pthread_attr_getinheritsched(pthread_attr_t *attr,int *inheritsched);
PTHREAD_INHERIT_SCHED    新的线程继承创建线程的策略和参数! 不会默认继承
PTHREAD_EXPLICIT_SCHED   来自参数

int pthread_attr_setstacksize(pthread_attr_t *attr, size_t stacksize);
int pthread_attr_getstacksize(pthread_attr_t *attr, size_t *stacksize);
若不指定分配堆栈大小,系统会分配默认值,查看默认值方法如下:8M
ulimit -s
8192
在嵌入式中内存不是很大,若采用默认值的话,若内存不足,则 pthread_create 会返回失败

int pthread_attr_setdetachstate(pthread_attr_t *attr, int detachstate);
int pthread_attr_getdetachstate(pthread_attr_t *attr, int *detachstate);
PTHREAD_CREATE_DETACHED 分离
PTHREAD_CREATE_JOINABLE 可接合  默认 用pthread_join来回收线程资源
一个可结合的线程能够被其他线程收回其资源和杀死;在被其他线程回收之前,它的存储器资源(如栈)是不释放的。
一个分离的线程是不能被其他线程回收或杀死的,它的存储器资源在它终止时由系统自动释放。


#include<stdio.h>
#include<pthread.h>
#include <signal.h>
#include<string.h>

int main()
{
 pthread_t task,task1,task2;
 pthread_attr_t attr,attr1;
 struct sched_param sched_prio;
 int ret=-1;
 char a[]="hello1111";
 char b[]="hello2222";
 
 
 ret = pthread_attr_init(&attr);
 if(0 != ret)
 {
  printf("Task pthread_attr_init failed!\n");
  return -1;
 }
 ret = pthread_attr_init(&attr1);
 if(0 != ret)
 {
  printf("Task pthread_attr_init1 failed!\n");
  return -1;
 }
 
 
 ret = pthread_attr_setschedpolicy(&attr, SCHED_FIFO);
 if(0 != ret)
 {
  printf("pthread_attr_setschedpolicy failed!\n");
  return -1;
 }
 ret = pthread_attr_setschedpolicy(&attr1, SCHED_FIFO);
 if(0 != ret)
 {
  printf("pthread_attr_setschedpolicy failed!\n");
  return -1;
 }
 
 sched_prio.__sched_priority = 21;
 ret = pthread_attr_setschedparam(&attr, &sched_prio);
 if(0 != ret)
 {
  printf("pthread_attr_setschedparam failed!\n"); 
 }
 sched_prio.__sched_priority = 41;
 ret = pthread_attr_setschedparam(&attr1, &sched_prio);
 if(0 != ret)
 {
  printf("pthread_attr_setschedparam failed!\n"); 
 }
 
 ret=pthread_create(&task,&attr,(void *)pthread_task_fun,(void *)a);
 if(0 != ret)
 {
  printf("pthread_create failed!\n"); 
 }
 
 ret=pthread_create(&task1,&attr1,(void *)pthread_task_fun,(void *)b);
 if(0 != ret)
 {
  printf("pthread_create failed!\n"); 
 }
 pthread_attr_destroy(&attr);
 pthread_attr_destroy(&attr1);
 
 
 pthread_join(task,NULL);
 pthread_join(task1,NULL);
 return 0; 
}

void pthread_task_fun(void *args)
{
 char *p=(char *)args;
 int i = 0;
 
       
 while(i++<1000)
 {
  printf("%s\n",p);
 }
 
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
大学生就业服务平台管理系统按照操作主体分为管理员和用户。管理员的功能包括学生档案管理、字典管理、试卷管理、试卷选题管理、试题表管理、考试记录表管理、答题详情表管理、错题表管理、法律法规管理、法律法规收藏管理、法律法规留言管理、就业分析管理、论坛管理、企业管理、简历管理、老师管理、简历投递管理、新闻资讯管理、新闻资讯收藏管理、新闻资讯留言管理、学生信息管理、宣传管理、学生管理、职位招聘管理、职位收藏管理、招聘咨询管理、管理员管理。用户的功能等。该系统采用了Mysql数据库,Java语言,Spring Boot框架等技术进行编程实现。 大学生就业服务平台管理系统可以提高大学生就业服务平台信息管理问题的解决效率,优化大学生就业服务平台信息处理流程,保证大学生就业服务平台信息数据的安全,它是一个非常可靠,非常安全的应用程序。 管理员权限操作的功能包括管理新闻信息,管理大学生就业服务平台信息,包括考试管理,培训管理,投递管理,薪资管理等,可以管理新闻信息。 考试管理界面,管理员在考试管理界面中可以对界面中显示,可以对考试信息的考试状态进行查看,可以添加新的考试信息等。投递管理界面,管理员在投递管理界面中查看投递种类信息,投递描述信息,新增投递信息等。新闻信息管理界面,管理员在新闻信息管理界面中新增新闻信息,可以删除新闻信息。新闻信息类型管理界面,管理员在新闻信息类型管理界面查看新闻信息的工作状态,可以对新闻信息的数据进行导出,可以添加新新闻信息的信息,可以编辑新闻信息信息,删除新闻信息信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值