Linux 多线程编程( POSIX )( 二 )----->代码区

转自:http://blog.sina.com.cn/s/blog_6dc9e4cf0100xcvk.html

1.detach实例:

//!> detach

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>

void * entrance( void * arg )
{
 

    int                              get_attr_int;
      pthread_attr_t            attr;

      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_t                  tid;
      pthread_attr_t            attr;
     
      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处理,不然看不到子线程输出
     
      return0;
}

            运行结果:
                        创建OK...
                        子进程创建OK, ID==  1635653376
                        我是被分离的线程...


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

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

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>

void * entrance( void * arg )
{
      int            policy;                  //!> 调度策略
      int            max_;                  //!> 最大优先级
      int            min_;                  //!> 最小优先级
     
      structsched_param            param;            //!> 参数
      pthread_attr_t                        attr;            //!> 属性
     
      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_t      tid;
     
      pthread_create( &tid, NULL, entrance, NULL );

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

      return0;
}

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


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

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <sys/types.h>

void * entrance( void * arg )
{
      pthread_attr_t            attr;
      int                                scope;            //!> 作用域
      size_t                          stack_size;      //!> 栈大小
      void                      stack_addr;      //!> 栈地址
      size_t                          guardsize;      //!> 警戒缓冲区大小
     
      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_t            tid;
     
      if(pthread_create( &tid, NULL, entrance, NULL ) != 0)
      {
            printf("创建线程失败...\n");
            exit(EXIT_FAILURE );
      }
     
      pthread_join( tid, NULL );
     
      return0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值