线程:
- 优点:节俭,可以共享堆栈段,数据段。同一个进程下的线程可以共享数据空间。
- Linux下的多线程遵循的是POSIX线程接口,称为pthread (头文件pthread.h),连接使用的库是lib pthread.a .
int pthread_create(pthread_t *tidp, const pthread_attr_t *attr, void *(*start_rtn)(void), void *arg)
(1). tidp: 线程id (获取线程的id).
(2). attr: 线程属性 (一般为空NULL).
(3). start_rtn: 线程要执行的函数.
(4). arg: start_rtn函数的参数.
(5). 返回值: 0 代表成否,其它为错误.
编译时要加上 -lpthread
例子: gcc file.c -lpthread -o file
二.线程终止
线程从启动到进程中返回.(return)
线程可以被另一个进程终止.
线程自己调用终止函数.(pthread_exit)
void pthread_exit(void *rval_ptr)
功能:终止调用的线程.
rval_ptr: 线程退出返回值的指针.
三.线程的等待 (堵塞)
int pthread_join(pthread_t pid, void **rval_ptr)
功能:阻塞调用线程的进程,直到指定的线程终止.
tid: 等待退出的线程id. (pthread_create获取)
rval_ptr: 线程退出的返回值指针.
四.线程标识
pthread_t pthread_self(void)
功能:获取线程标识符.
五.线程清除
从pthread_cleanup_push的调用点到pthrad_cleanup_pop之间的程序段中的终止动作(包括调用pthread_exit和异常终止,但是不包括return)都将执行.
void
功能:清除函数压入清除栈中.
rtn: 清除函数.
arg: 清除函数的参数.
void pthread_cleanup_pop(int execute)
功能: 清除函数出栈.
execute: 非0执行 0不执行 (异常出现都会执行 不管0还是非0).
例子:
//线程清除函数
#include
<stdio.h>
#include <pthread.h>
#include <unistd.h>
void *clean(void *arg)
{
}
void *thr_fn1(void *arg)
{
}
void *thr_fn2(void *arg)
{
}
int main(void)
{
}