linux 获取当前线程 attr,pthread_attr_t 线程属性 代码学习

1.detach实例:

//!> detach

#include

#include

#include

void * entrance( void * arg )

{

intget_attr_int;

pthread_attr_tattr;

printf("子进程创建OK, ID ==%d\n", (unsigned)pthread_self());

if( pthread_attr_getdetachstate( &attr, &get_attr_int ) != 0 )

{

printf("获取属性失败...\n");

exit( EXIT_FAILURE );

}

if( PTHREAD_CREATE_DETACHED == get_attr_int )//!> 设置分离OK

{

printf("我是被分离的线程...\n");

}

}

int main( int argc, char ** argv )

{

pthread_ttid;

pthread_attr_tattr;

pthread_attr_init( &attr );//!> 初始化属性

if( pthread_attr_setdetachstate( &attr, PTHREAD_CREATE_DETACHED ) != 0 )

{

printf("设置属性失败...\n");

exit( EXIT_FAILURE );

}

//!> 设置成分离

if( pthread_create( &tid, &attr, entrance, NULL ) !=0 )//!> 按照此属性创建线程

{

printf("创建线程失败...\n");

exit( EXIT_FAILURE );

}

else

{

printf("创建OK... \n");

}

//!> pthread_join(tid);//!> 注意此处的join是不需要的!!!!!!!

pthread_attr_destroy( &attr );//!> 去除属性

sleep( 2 );//!> 注意此处要有一个释放CPU处理,不然看不到子线程输出

return 0;

}

运行结果:

创建OK...

子进程创建OK, ID ==1635653376

我是被分离的线程...

2.继承、优先级、调度策略 实例

//!> 继承、线程优先级、调度策略

#include

#include

#include

void * entrance( void * arg )

{

intpolicy;//!> 调度策略

intmax_;//!> 最大优先级

intmin_;//!> 最小优先级

struct sched_paramparam;//!> 参数

pthread_attr_tattr;//!> 属性

pthread_attr_init( &attr );//!> 初始化

//!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

//!> 下面设置继承性

pthread_attr_setinheritsched( &attr, PTHREAD_EXPLICIT_SCHED );

//!> 设置继承性

pthread_attr_getinheritsched( &attr, &policy );

//!> 得到i继承属性

if( PTHREAD_EXPLICIT_SCHED == policy )

{

printf("继承属性是:PTHREAD_EXPLICIT_SCHED\n");

}

else if( PTHREAD_INHERIT_SCHED == policy )

{

printf("继承属性是:PTHREAD_INHERIT_SCHED\n");

}

else

{

printf("继承属性Error...\n");

exit( EXIT_FAILURE );

}

//!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

//!> 下面设置调度策略

pthread_attr_setschedpolicy( &attr, SCHED_RR );//!> 设置轮转法

pthread_attr_getschedpolicy( &attr, &policy );//!> 获得...

if( SCHED_FIFO == policy )

{

printf("调度算法:SCHED_FIFO\n");

}

else if( SCHED_RR == policy )

{

printf("调度算法:SCHED_RR\n");

}

else if( SCHED_OTHER == policy )

{

printf("调度算法:SCHED_OTHER\n");

}

else

{

printf("调度算法Error....\n");

exit( EXIT_FAILURE );

}

//!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

//!> 下面优先级设置

max_ = sched_get_priority_max( policy );//!> 得到系统最大优先级值

min_ = sched_get_priority_min( policy );//!> 得到系统最小优先级值

printf("系统最大优先级值: %d \n", max_);

printf("系统最小优先级值: %d \n", min_);

param.sched_priority = max_;

pthread_attr_setschedparam( &attr, &param );//!> 设置param

pthread_attr_getschedparam( &attr, &param );//!> 获得param

printf("优先级数 == %u\n", param.sched_priority);

pthread_attr_destroy( &attr );

}

int main( int argc, char ** argv )

{

pthread_ttid;

pthread_create( &tid, NULL, entrance, NULL );

pthread_join( tid, NULL );//!> 默认是非分离状态,所以要join

return 0;

}

3.作用域、stack大小及地址、警戒缓冲区 实例

//!> 作用域、stack大小及地址、警戒缓冲区 实例

#include

#include

#include

#include

void * entrance( void * arg )

{

pthread_attr_tattr;

intscope;//!> 作用域

size_tstack_size;//!> 栈大小

void*stack_addr;//!> 栈地址

size_tguardsize;//!> 警戒缓冲区大小

pthread_attr_init( &attr );

pthread_attr_getscope( &attr, &scope );//!> 得到scope

if( PTHREAD_SCOPE_PROCESS == scope )

{

printf("Scope == PTHREAD_SCOPE_PROCESS\n");

}

else if( PTHREAD_SCOPE_SYSTEM == scope )

{

printf("Scope == PTHREAD_SCOPE_SYSTEM\n");

}

else

{

printf("Scope Error...");

exit( EXIT_FAILURE );

}

pthread_attr_getstacksize( &attr, &stack_size );//!> 得到栈大小

printf("Stack Size == %d \n", (int)stack_size);

pthread_attr_getstackaddr( &attr, &stack_addr );//!> 得到栈地址

printf("Stack address == %s \n", ( char * )stack_addr );

pthread_attr_getguardsize( &attr, &guardsize );//!> 得到警戒区大小

printf("Guardsize == %d\n", (int)guardsize);

pthread_attr_destroy( &attr );

}

int main( int argc, char ** argv )

{

pthread_ttid;

if( pthread_create( &tid, NULL, entrance, NULL ) != 0 )

{

printf("创建线程失败...\n");

exit( EXIT_FAILURE );

}

pthread_join( tid, NULL );

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值