码迷,mamicode.com
首页 > 编程语言 > 详细

linux学习笔记之线程

时间:2015-02-03 14:43:06      阅读:244      评论:0      收藏:0      [点我收藏+]

标签:

一、基础知识

1:基础知识。

  1,线程需要的信息有:线程ID,寄存器,栈,调度优先级和策略,信号屏蔽字,errno变量和线程私有数据。

  2,进程的所有信息对所有线程都是共享的。

  3,是否支持有多线程有以下两种方式测试:

    1)编译时确定:#ifdef _POSIX_THREADS

    2)运行时确定:sysconf函数调用 _SC_THREADS 常用。

  4,线程ID。

    1)一个进程中,线程ID具有唯一性。线程ID依赖与进程后,才有意义。

    2)线程ID表示类型:pthread_t类型

  5,变量增量操作的步骤:

    1)变量值从 内存单元 读入 寄存器。

    2)寄存器中对变量进行修改。

    3)将变量值 写回 内存单元

    4)所以,多个线程试图同时修改同一变量时,需要同步。

2:线程创建和终止。

  1,线程创建。

    1)并不能确定哪个线程先运行(和子进程创建类似)。

    2)创建函数create失败后,通常会返回错误码。

  7,线程终止。

    1)任意线程调用 exit, _Exit, _exit函数都会使进程终止。(所以不可以使用此方式终止单个线程)

    2)从启动例程返回。返回值时线程退出码。

    3)可以被同进程中的其他线程取消。

    4)线程调用pthread_exit函数。

3:进程和线程功能/函数对应表

进程原语 线程原语 描述

fork

pthread_create 创建新的控制流
exit pthread_exit 从先有控制流中退出
waitpid pthread_join 从控制流中得到退出状态
atexit pthread_cancel_push 注册在退出控制流时的调用的函数
getpid pthread_self 获取控制流的ID
abort pthread_cancel 请求控制流的非正常退出。

 

二、相关函数。

1:线程操作函数。

1 比较线程ID大小。
  int pthread_equal( pthread_t tid1, pthread_t tid2 )
2 获取自身线程ID。
  pthread_t pthread_self( void );
3 创建线程。
  int pthread_create( pthread_t *restrict tidp, const pthread_attr_t *restrict attr, void *(*start_rtn)(void *), void *restrict arg);
  1 参数arg用于定制各种不同的线程属性
4 线程终止。
  void pthread_exit( void *rval_ptr );
5 获得线程退出状态。
  int pthread_join( pthread_t thread, void **rval_ptr );
  1 参数rval_ptr包含返回码。
6 取消其他线程(同进程中使用)
  int pthread_cancel( pthread_t tid );
  1 仅仅提出请求。并不强制终止。
7 线程清理处理程序(类似进程的atexit)。
  void pthread_cleanup_push( void (*rtn)(void *), void *arg);
  void pthread_cleanup_pop( int execute );
  1 参数execute=0时,清理函数将不被调用。
  2 每次调用pop函数时,都出删除上一个push的清理程序。
  3 这些函数被实现为宏。需要注意{}等匹配。
  4 清理程序的注册和执行顺序相反。
8 分离线程。
  int pthread_detach( pthread_t tid );
9 上述函数中。部分无类型指针,可以传递的值有很多,甚至可以时一个结构体。

2,线程属性 相关函数。

1 线程属性 初始化 和 类析构函数
  int pthread_attr_init( pthread_attr_t *attr );
  int pthread_attr_destroy( pthread_attr_t *attr );
2 获取/设置 分离状态。
  int pthread_attr_getdetachstats( const pthread_attr_t *restrict attr, int *detachstate );
  int pthread_attr_setdetachstats( pthread_attr_t *attr, int *detachstate );
  1 参数detachstate只有两个值:PTHREAD_CREATE_ DETACHED/JOINABLE.
3 获取/设置 线程栈属性 stackaddr。
  int pthread_attr_getstack( const pthread_attr_t *restrict attr, void **restrict stackaddr, size_t *restrict stacksize );
  int pthread_attr_setstack( pthread_attr_t *attr, void *stackaddr, size_t stacksize );
  1 stackaddr线程属性定义为栈的最低内存地址。是起始位置,还是结尾位置取决于栈的发展方向。通常是结尾(栈由高向低)
4 获取/设置 栈大小属性 stacksize。
  int pthread_attr_getstacksize( const pthread_attr_t *restrict attr, size_t *restrict stacksize );
  int pthread_attr_setstacksize( pthread_attr_t *attr, size_t stacksize );
5 获取/设置 线程栈末尾缓冲区大小 guardsize。
  int pthread_attr_getguardsize( const pthread_attr_t *restrict attr, size_t *restrict guardsize );
  int pthread_attr_setguardsize( pthread_attr_t *attr, size_t guardsize );

 三、

linux学习笔记之线程

标签:

原文地址:http://www.cnblogs.com/zheng39562/p/4269875.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!