●头文件:#include<pthread.h>
●在编译时注意加上-lpthread参数,以调用静态链接库。因为pthread并非Linux系统的默认库
●man帮助中看不到pthread的手册,使用命令安装:
sudo apt-get install manpages-posix manpages-posix-dev
linux下进程和线程使用的函数比较:
1.线程的创建
int pthread_create(pthread_t *restrict tidp, const pthread_attr_t *restrict attr, void *(*start_rtn)(void*), void *restrict arg);
返回值:若成功则返回0,否则返回出错编号
(restrict说明这个变量没有别的指针可以修改,让编译器生成只读内存一次的代码)
第一个参数tidp:函数调用后,指向线程ID
第二个参数attr:线程属性,如果为NULL,就选择默认值
第三个参数start_rtn:线程执行函数
第四个参数arg:传递给线程执行函数的参数
2.线程执行
线程从创建之后开始执行
3.等待线程执行结束
int pthread_join(pthread_t thread, void **value_ptr);
参数一thread:要等待的线程的ID
参数二value_ptr:线程退出时的一些信息,可以设为NULL
调用pthread_join的线程会阻塞,直到指定的线程返回,调用了pthread_exit,或者被取消。
如果线程简单的返回,那么rval_ptr被设置成线程的返回值,参见范例1;如果调用了pthread_exit,则可将一个无类型指针返回,在pthread_join中对其进行访问,参见范例2;如果线程被取消,rval_ptr被设置成PTHREAD_CANCELED。
如果我们不关心线程的返回值,那么我们可以把rval_ptr设置为NULL。
4.线程锁
初始化:
int pthread_mutex_init(pthread_mutex_t *restrict mutex,const pthread_mutexattr_t *restrict attr);
或者:pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
加解锁:
int pthread_mutex_lock(pthread_mutex_t *mutex);
int pthread_mutex_trylock(pthread_mutex_t *mutex);
int pthread_mutex_unlock(pthread_mutex_t *mutex);
成功返回0,错误返回其他值