Linux 多线程编程
线程(Thread)已被许多操作系统所支持,包括Windows/NT ,Linux
以前的多线程其实是多进程,而现在意味着一个进程中有多个线程
使用多线程的原因(多线程的优点):
1.“节省”,启动一个新的进程需要分配给它独立的地址空间,建立众多的数据表来维护他的代码段,堆栈段和数据段,这是一种“昂贵的多任务操作方式”。运行在一个进程中的多个线程,使用相同的地址空间,线程间彼此切换所需时间也远远小于进程切换的时间,线程开销极大的缩小。
2.线程间方便的通信机制。不同的进程具有独立的数据空间,进程间通信费时且不方便。而同一进程下的线程共享数据空间,所以一个线程的数据可以直接为其他线程所用,快捷而方便。
3.使CPU系统更加有效。操作系统会保证当线程数不大于CPU数目时,不同的线程运行于不同的CPU上。
4.改善程序结构。长而复杂的进程可以考虑分为多个线程,成为几个独立或半独立的运行部分。
Linux系统下的多线程遵循POSIX线程接口,编写程序,使用pthread.h头文件
创建线程
#include <pthread.h>
Int pthread_create(pthread_t *tidp, const pthread_attr_t *attr, void *(*start_rrtn)(void),void *arg)
tidp: 线程id
attr: 线程属性(通常为空)
start_rtn:线程要执行的函数
arg:start_rtn的
终止线程
线程正常退出方式:
线程从启动例程中返回
线程可以被另一个线程终止
线程自己调用跑pthread_exit函数
退出线程
void pthread_exit(void *rval_ptr) //rval_ptr 线程退出返回的指针
线程等待
int pthread_join(pthread_t tid,void**rval_ptr) //阻塞调用线程,直到指定的线程终止。
Tid :等待退出的线程id Rval_ptr:线程退出的返回值的指针