简单的多线程编程之获得线程参数
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<pthread.h>
void *test_func(void *arg);
char msg[] = "hello test";
int thread_finish = 0;
int main(int argc, char argv[])
{
pthread_t thread_a;
int ret,state;
int policy;
pthread_attr_t attr;
ret = pthread_attr_init(&attr);
if(ret!=0) {
printf("attr init fail\n");
return -1;
}
ret = pthread_attr_getdetachstate(&attr,&state);
if(ret==-1) {
printf("get detach state fail\n");
return -1;
}
else printf("The default detachstate is %d\n",state);
ret = pthread_attr_getschedpolicy(&attr,&policy);
if(ret==-1) {
printf("get policy fail\n");
return -1;
}
else printf("The default policy is %d\n",policy);
ret = pthread_create(&thread_a,&attr,test_func,(void *) msg);
if(ret!=0) {
printf("Thread create fail\n");
return -1;
}
while(!thread_finish) {
printf("Waiting for thread finish\n");
sleep(1);
}
printf("The created thread finished \n");
return 0;
}
void *test_func(void *arg)
{
int tid=pthread_self();
printf("The new created thread %u is runing\n",tid);
printf("The msg:%s\n",(char *)arg);
// sleep(1);
printf("The new created thread is ready to finish\n");
thread_finish = 1;
pthread_exit(NULL);
}
编译:gcc thread_simple.c -o ts
-lpthread运行结果:
一些参数获得与设置函数:
thread ID:pthread_self()
线程独立或者可连接状态detachstate:pthread_attr_getdetachstate(&attr,&state);
pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED);
或者pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_JOINABLE);(默认)
获取设置栈stack大小:
pthread_attr_getstacksize(&attr,&size);
pthread_attr_setstacksize(&attr,&size);
获取设置调度策略:pthread_attr_getshedpolicy(&attr,&policy);
pthread_attr_setshedpolicy(&attr,&policy);
获取设置调度策略参数:pthread_attr_getshedparam(&attr,¶m);
pthread_attr_setshedparam(&attr,¶m);
其实就是设置优先级
struct sched_param param
param.sched_priority=-10;
pthread_attr_setshedparam(&attr,¶m);
以上成功均返回0,不成功返回错误码。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。