Pthead 线程 -- 多线程程序设计

  POSIX线程(POSIX threads),简称Pthreads,是线程的POSIX标准。该标准定义了创建和操纵线程的一整套API。在类Unix操作系统(Unix、Linux、Mac OS X等)中,都使用Pthreads作为操作系统的线程。Windows操作系统也有其移植版pthreads-win32。
  Pthreads 定义了一套 C 语言的类型、函数与常量,它以 pthread.h 头文件和一个线程库实现。
  在 Linux 编译多线程程序的时候,要加上 -lpthread 选项,指定pthread库。在程序代码中包含线程头文件 pthread.h 。

数据类型

  • pthread_t:线程ID

类型定义:

typedef unsigned long int pthread_t;
//come from /usr/include/bits/pthreadtypes.h

用途:pthread_t用于声明线程ID。

sizeof(pthread_t) =8
  • pthread_attr_t:线程属性
typedef struct
{
    int                  detachstate;   线程的分离状态
    int                  schedpolicy;   线程调度策略
    struct sched_param   schedparam;    线程的调度参数
    int                  inheritsched;  线程的继承性
    int                  scope;         线程的作用域
    size_t               guardsize;     线程栈末尾的警戒缓冲区大小
    int                  stackaddr_set;
    void *               stackaddr;     线程栈的位置
    size_t               stacksize;     线程栈的大小
}pthread_attr_t;

操纵函数

创建线程

  创建一个线程,函数原型:

 int pthread_create(
 pthread_t             *pthread_id,
 const pthread_attr_t  *attr,
 void                  *(*start_rtn)(void *),
 void                  *arg);
  • pthread_t *pthread_id: 线程id,由系统自动填充。
  • const pthread_attr_t *attr:线程属性,一般情况下为 NULL;
  • void * (*start_rtn)(void*):线程执行的函数。该函数的返回值是void类型的指针,函数参数也是void类型的指针,注意:
    这个函数也可以不传递参数, 比如:
void *create(void *args); //标准形式。
void *create(void); //这个也行。
  • void *arg 线程执行函数的参数。

等待线程结束

  阻塞当前的线程,直到另外一个线程运行结束,函数原型:

 int pthread\_join(pthread_t pthread_id, void **args);
  • pthread_t pthread_id:线程的id。
  • void **args:线程返回的状态码。

终止当前线程

  终止当前线程,函数原型:

void pthread_exit (void *retval);
  • retval:函数的返回代码。

获取线程 ID 号

  返回线程 id,这个 id 跟 pthread_creat 中的第一个参数的值一样,函数原型:

pthread_t pthread_self (void);

取消一个线程

  中断另外一个线程的运行,函数原型:

int pthread_cancle(pthread_t thread);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值