博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第12章 posix 线程
阅读量:6150 次
发布时间:2019-06-21

本文共 3070 字,大约阅读时间需要 10 分钟。

pthread_create(pthread_t  * thread, pthread_attr_t *attr,void *(*founction (void *),void *arg) :建立

pthread_join(): 等待建立的线程结束,并可返回值

pthread_exit(): 结束线程

注: 用gcc 编译时 后跟: -lpthread 就可以.

信号量:

  intclude <semaphore.h>

  int sem_init( sem_t  *sem, int pshared, unsigned int value);

  int sem_wait( sem_t * sem);  //减少 1

  int sem_post( sem_t * sem);  //增加 1

互斥量: mutex 是 mutual exclusion 合写.

  intclude <pthread.h>

  int pthread_mutex_init( pthread_mutex_t *mutex, const pthread_mutexattr_t *mutexattr);

  int pthread_mutex_lock( pthread_mutex_t *mutex);

  int pthread_mutex_unlock( pthread_mutex_t *mutex);

  如果已被锁定, 其他调用 lock 时,则阻塞.  mutexattr 为NULL时 , 属性为默认值.

使用方法:

  1. 先 pthread_mutex_init

  2. pthread_create 建立线程.

  3 pthread_mutex_lock 和 pthread_mutex_unlock 加锁和开锁

  4 pthread_join 结束 线程

  5 pthread_mutex_destory 结束 .

  用sleep()函数 来实现两个线程加锁和解锁.

 

线程的属性:

其中:

 detached 属性,主线程不用等待子线程的结束.

  用法:

  pthread_attr_t thread_attr;

  res = pthread_attr_init(&thread_attr); // res 返回0 为成功

  /*设置属性*/

  res = pthread_attr_setdetachstate(&thread_attr, PTHREAD_CREATE_DETACHED);

   /*然后再建立线程*/

  res = pthread_create(&a_thread,&thread_attr, thread_function,(void*)arg);

  /*结束属性*/

  (void) pthread_attr_destory(&thread_attr);

 

调度属性: ( pthread_attr_setschedpolicy(pthread_attr_t  *attr, int policy); )

  用法:

    声明:

      pthread_t  a_thread;    //use to create pthread

      pthread_attr_t thread_attr;  //use to initial attributes

      int max_priority;

      int min_priority; 

      struct sched_param scheduling_value;   

    1.  res = pthread_attr_init(&thread_attr);    //初始化

    2.  res = pthread_attr_setschedpolicy( &thread_attr, SCHED_OTHRE);  //设置属性

    3.  res = pthread_attr_setdetachstate( &thread_attr, PTHREAD_CREATE_DETACHED);

    4.  res = pthread_create( &a_thread, &thread_attr, thread_function, (void *) arg);  //建立新线程

    5.  max_priority  = sched_get_priority_max( SCHED_OTHER    );  //取得优先级范围

    6.  min_priority = sched_get_priority_min( SCHED_OTHER );

    7.  scheduling_value.sched_priority = min_priority;  //以下是设置新优先级

    8.  res = pthread_attr_setschedparam( & thread_attr, &scheduling_value);  //同上

    9.  (void) pthread_attr_destroy( &thread_attr);    //

 

取消线程:  用一个线程要求另一个线程终止.

  int pthread_cancel(pthread_t thread);

  int pthread_setcancelstate(int state, int *oldstate);  //在子线程中设置取消状态

     其中: state可为: 1, PTHREAD_CANCEL_ENABLE  //允许接收取消请求

            2,PTHREAD_CANCEL_DISABLE  //忽略请求

        oldstate: 提取以前的状态,可设置为NULL.

 

如果 接收到请求, 则

  int pthread_setcanceltype( int type, int *oldtype);

    type: 1, PTHREAD_CANCEL_ASYNCHRONOUS  //立即执行

        2, PTHREAD_CANCEL_DEFFERRED

      //等待线程执行到了取消点函数再执行, 如:  pthread_join, pthread_cond_wait ... 详见 man 7 pthreads 中的

      // cancelation points

 

 多线程:

数组方法:for(lots_of_threads = 0; lots_of_threads < NUM_THREADS; lots_of_threads++) {

      res = pthread_create(&(a_thread[lots_of_thread]),NULL, thread_function, \

          (void *)&lots_of_threads);

      if (res != 0) {
      perror(“Thread creation failed”);
      exit(EXIT_FAILURE);
      }
      sleep(1);
    }

 

 

 

 

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/oh-mine/p/5229408.html

你可能感兴趣的文章
jQuery最佳实践
查看>>
centos64i386下apache 403没有权限访问。
查看>>
jquery用法大全
查看>>
PC-BSD 9.2 发布,基于 FreeBSD 9.2
查看>>
网卡驱动程序之框架(一)
查看>>
css斜线
查看>>
Windows phone 8 学习笔记(3) 通信
查看>>
Revit API找到风管穿过的墙(当前文档和链接文档)
查看>>
Scroll Depth – 衡量页面滚动的 Google 分析插件
查看>>
Windows 8.1 应用再出发 - 视图状态的更新
查看>>
自己制作交叉编译工具链
查看>>
Qt Style Sheet实践(四):行文本编辑框QLineEdit及自动补全
查看>>
[物理学与PDEs]第3章习题1 只有一个非零分量的磁场
查看>>
深入浅出NodeJS——数据通信,NET模块运行机制
查看>>
onInterceptTouchEvent和onTouchEvent调用时序
查看>>
android防止内存溢出浅析
查看>>
4.3.3版本之引擎bug
查看>>
SQL Server表分区详解
查看>>
使用FMDB最新v2.3版本教程
查看>>
SSIS从理论到实战,再到应用(3)----SSIS包的变量,约束,常用容器
查看>>