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;
}

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、 4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值