pthread多线程编程

 

●头文件:#include<pthread.h>

●在编译时注意加上-lpthread参数,以调用静态链接库。因为pthread并非Linux系统的默认库

man帮助中看不到pthread的手册,使用命令安装:

sudo apt-get install manpages-posix manpages-posix-dev

 

linux下进程和线程使用的函数比较:

 

 pthread多线程编程_第1张图片

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,错误返回其他值

 

你可能感兴趣的:(JOIN,thread,多线程,编程,null,编译器)