POSIX线程库的使用方法:
1. 与线程有关的函数构成了一个完成的系列,绝大多数函数的名字有是以“pthread_"开头的
2. 要使用这些函数库,要通过引入<pthread.h>
3. 链接这些线程函数库时要使用编译器命令的”-lpthread"
线程和进程比较:
进程 线程
pid_t pthread_t
fork() pthread_create()
waitpid pthread_join()
exit() pthread_exit()
在main函数中调用return 在线程入口函数中调用return
僵进程 僵线程
waitpid() pthread_join()
kill(他杀) pthread_cancel()(他杀)
函数介绍:
int pthread_create(pthread_t * thread, const pthread_attr * attr, void *(*start_routine)(void*), void * arg);
功能:创建一个新的线程
参数:
thread:返回线程ID
attr :设置线程的属性,attr为NULL表示使用默认属性
start_routine: 是个函数地址, 线程启动后要执行的函数
arg: 传给线程启动函数的参数
返回值:成功返回0,失败返回错误码
错误检查:
1.传统的一些函数是,成功返回0,失败返回-1,并且对全局变量errno赋值以指示错误
2.pthreads函数出错时不会设置全局变量errno(而大部分其他POSIX函数也会这样做)。而是将错误代码通过返回值返回
3.pthreads同样也提供了线程内的errno变量,以支持其他使用errno的代码,对于pthreads函数的错误,建议通过返回值业判定,因为读取返回值要比读取线程内的errno变 量的开销更小
void pthread_exit(void*value_ptr)
功能:线程终止
参数:value_ptr:不要指向一个局部变量
返回值:无返回值,跟进程一样,线程结束的时候无法返回到他的调用者
pthread_self(void)
功能:返回线程ID
返回值:成功返回0;
int pthread_cancel(pthread_t thread)
功能:取消一个执行中线程(一个线程可以杀死另外一个线程)
参数:thread:线程ID
返回值:成功返回0,失败返回错误码
pthead_detach()
功能:将一个线程分离
参数:线程ID
返回值:成功返回0;失败返回错误码