POSIX多线程--线程基本操作接口
来源:互联网 发布:黑暗之魂 隐藏 知乎 编辑:程序博客网 时间:2024/06/05 00:37
与线程有关的函数构成了一个完整的系列,绝大多数函数的名字都是以“pthread_”打头的
链接这些线程函数库时要使用编译器命令的”-lpthread“选项
int pthread_create(pthread_t thread, const pthread_attr_t *attr, void (start_routine)(void), void *arg);
功能:创建一个新的线程
参数:
thread:返回线程ID
attr:设置线程的属性,attr为NULL表示使用默认属性
start_routine:是函数地址,线程启动后要执行的函数(所指向的函数要接受一个无类型(void)参数,函数返回值类型也为无类型)
arg:传递给线程启动函数的参数
返回值:成功返回0;失败返回错误码
错误检测
* 传统的一些函数是,成功返回0,失败返回-1,并且对全局变量errno赋值以指示错误* pthreads函数出错时不会设置全局变量errno,而是将错误代码通过返回值返回* pthreads统一也提供线程内的errno变量,以支持其他使用errno的代码。对于pthreads函数的错误,建议通过返回值判定,因为读取返回值要比读取线程内的errno变量开销更小
通常处理方法:
if((ret = pthread_create(&tid, NULL, thread_routine, NULL))){
fprintf(stderr, “pthread_create:%s\n”, strerror(ret));
}
int pthread_join(pthread_t thread, void ** retval);
功能:以阻塞方式等待一个thread指定的线程结束。当函数返回时,被等待线程的资源别收回。
参数:thread:线程标识符
retval:用户定义的指针,用来存储被等待线程的返回值。
返回值:0表示成功。失败,返回错误号。
int pthread_exit(void *value_ptr);
功能:线程终止
参数:
value_ptr:
返回值:无返回值,跟进程一样,线程结束的时候无法返回到它的调用者(自身)
int pthread_cancel(pthread_t thread);
功能:取消一个执行中的进程 – 一个进程可以杀死另外一个线程
参数:thread:线程ID
返回值:成功返回0;失败返回错误码
pthread_t pthread_self(void);
功能:返回当前线程ID
返回值:成功返回0
int pthread_detach(pthread_t thread);
功能:讲一个线程分离
参数:thread:线程ID
返回值:成功返回0;失败返回错误码
例:pthread_detach(pthread_self());//将当前线程设置为分离状态–避免僵线程产生
进程和线程的对比
线程
* 进程里执行代码的部分;* 包含一系列机器指令所必须的机器状态,包括当前指令位置(一般为PC寄存器)、栈顶指针SP、通用寄存器、地址和数据寄存器等。* 线程不包括进程中的其他数据,如地址空间和文件描述符;
进程
* 线程加上地址空间、文件描述符和其他数据。* 一个进程中的所有线程共享文件和地址空间,包括程序段、数据段和堆栈;
为什么用多线程?
1
多线程相对于进程相比,它是一种非常“节俭”的多任务操作方式。在linux系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护他的代码段,数据段和堆栈段。而运行一个进程中的多个线程,它们彼此使用相同的地址空间,共享大部分数据,启动一个线程所花费的空间远远小于启动一个进程。
2
多线程间方便的通信机制。对不同进程来说,它们有独立的数据空间,要进行数据的传递只能通过通信的方式进行。线程则不然,由于同一线程下的线程之间共享数据空间,所以一个线程的数据空有直接别其他线程所使用。
- POSIX多线程--线程基本操作接口
- POSIX线程-基本操作
- 一起来学POSIX thread 之 线程的创建和基本操作接口
- Linux系统下的多线程遵循POSIX线程接口
- POSIX多线程——基本线程管理函数介绍
- POSIX多线程——基本线程管理函数介绍
- POSIX多线程——基本线程管理函数介绍
- POSIX多线程——基本线程管理函数介绍
- Linux多线程实践(二)线程基本API(POSIX)
- POSIX线程多线程例子
- posix 多线程有感--线程
- POSIX多线程—线程基本概念
- 多线程开发1--线程的基本操作
- <linux线程>POSIX无名信号量的基本操作---两个线程间的通信
- POSIX threads线程操作函数
- posix多线程有感--POSIX 线程间的内存可视性
- posix线程接口的分析和使用
- Posix多线程编程(1)—线程基础
- DIV 边框重叠 像素变粗 解决办法
- Kth Largest Element in an Array
- 1041. Be Unique (20)
- 极速前进
- 斐波那契数列
- POSIX多线程--线程基本操作接口
- eclipse git 配置 远程上传按钮无法使用问题
- 【Hadoop】数据序列化系统Avro
- selenium支持的Firefox
- 百度地图笔记 图层类
- java.sql.SQLException: ORA-01578: ORACLE 数据块损坏问题解决办法
- CentOS VNCServer安装
- 斜线表头
- YAHOO 35条前端优化建议