多线程编程API

创建线程和结束线程

1. pthread_create
创建一个线程的函数是pthread_create,定义如下:

#include <pthread.h>

// pthread是新线程的标识符,后续pthread_*函数通过他来引用新线程。
// attr 表示线程属性,attr == NULL时时默认属性。
// start_routin和arg分别表示新线程将运行的函数和参数。
int pthread_create(pthread_t* thread, const pthread_attr_t* attr,
                   void*(*start_routine)(void*), void* arg);

#include <bits/pthreadtypes.h>
typedef unsigned long int pthread_t;

pthread_create 成功返回0,失败返回错误码。

2.pthread_exit
线程一旦被创建好,内核就可以通过调度内核线程来执行start_routine函数指针所指向的函数了。线程在结束时,最好调用如下函数,保证线程的安全退出。

    #include <pthread.h>

    void pthread_exit(void * retval);

pthread_exit 函数通过retval 参数向 线程的回收者传递其退出信息。它执行完之后不会回到调用者,而且永远不会。

3. pthread_join
一个进程中的所有线程都可以调用pthread_join函数来回收其他线程。即等待其他线程退出。这类似于回收进程的wait操作。

  #include <pthread.h>
  int pthread_join(pthread_t pthread, void** retval);

该函数被一直阻塞,直到目标线程被回收为止。

4.pthread_cancel
有时我们希望
异常终止**一个线程,即取消线程。它是通过:

  int pthread_cancel(pthread_t  thread);

thread是线程描述符。
成功时返回0,失败则返回错误码。是否可以取消根据线程的属性来进行判断。

线程属性

pthread_attr_t 结构体定义了一套完整的线程属性。

  #include <bits/ pthreadtypes.h>
  #define __SIZEOF_PTHREAD_ATTR_T 36 
  typedef union {
      char __size[__SIZEOF_PTHREAD_ATTR_T];
      long int __align;
  } pthread_attr_t;

这个结构中我们可以看到,线程的各种属性都包含在一个字符数组中。线程库有一系列的函数来操作 pthread_attr_t 类型的变量。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 转自:Youtherhttps://www.cnblogs.com/youtherhome/archive/201...
    njukay阅读 1,725评论 0 52
  • 简介 线程创建 线程属性设置 线程参数传递 线程优先级 线程的数据处理 线程的分离状态 互斥锁 信号量 一 线程创...
    第八区阅读 8,715评论 1 6
  • iOS 多线程系列 -- 基础概述iOS 多线程系列 -- pthreadiOS 多线程系列 -- NSThrea...
    shannoon阅读 2,794评论 1 8
  • 线程 在传统操作系统中,每个进程有一个地址空间和一个控制线程。事实上这几乎就是进程的定义。不过经常存在在同一个地址...
    伊恩的道歉阅读 2,379评论 0 6
  • 线程基础 线程是进程的一个执行单元,执行一段程序片段,线程共享全局变量;线程的查看可以使用命令或者文件来进行查看;...
    秋风弄影阅读 808评论 0 0

友情链接更多精彩内容