Linux编程------多线程

为什么有了进程,还要引入线程呢?
1.和进程相比,线程是一种非常“节俭”的多任务操作方式。在Linux系统下,启动一个新进程必须分配给它独立的地址空间,简历众多的数据表来维护它的代码段、堆栈段和数据段,这是一种“昂贵”的多任务工作的方式。
2.运行于一个进程中的多个线程,他们之间使用相同的地址空间,线程间彼此切换所需时间远小于进程间切换所需时间,据统计,一个进程的开销大约是一个线程开销的30倍左右。
3.使得多CPU系统更加有效。操作系统会保证当线程数不大于CPU数目时,不同的线程运行于不同的CPU上。
4.改善程序结构
LInux系统下的多线程遵循POSIX(可移植操作系统接口)线程接口,称为pthread。编写Linux下的多线程程序,需要使用头文件pthread.h,连接时需要使库libpthread.a
以下是多线程程序设计相关函数:
创建:
#include
int pthread_create(pthread_t * tidp(线程ID),const pthread_attr_t *attr(线程属性,通常为空),void *(*start_rtn)(void)线程要执行的函数,void *arg(start_rtn的参数))

pthread的库不是linux系统的库,编译时需加上-lpthread
#gcc filename -lpthread

#include
int pthread_join(pthread_t tid(等待退出的线程id),void **rval_ptr(线程退出的返回值指针))
功能:阻塞调用进程,直到指定线程终止
可以通过以下代码测试此函数的作用
Linux编程------多线程_第1张图片

#include
pthread_t pthread_self(void)
功能:获取调用线程的thread identifier

#include
void pthread_cleanup_push(void(*rtn)(void *),void *arg)
功能:将清除函数压入清除栈
Rtn:清除函数
Arg:清除函数的参数
void pthread_cleanup_pop(int execute)
将清除函数弹出清除栈
Execute执行到pthread_cleanup_pop()时是否在弹出清理函数的同时执行该函数,非0:执行;0:不执行

线程调用的正常退出方式:
1.线程从启动例程中返回
2.线程可以被另一个进程终止
3.线程自己调用pthread_exit函数
#include
void pthread_exit(void *rval_ptr(线程退出返回值的指针))
功能:终止调用进程
关于线程最基本的就先说这么多了。

你可能感兴趣的:(Linux编程------多线程)