https://www.ibm.com/developerworks/cn/linux/thread/posix_threadapi/part1/
#include<pthread.h>
pthread_t 线程标识符
pthread_create用来创建一个线程
int pthread_create(pthread_t *tid, //指向线程标识符的指针
const pthread_attr *attr, //用来设置线程属性
void* (*start_routine)(void*), //线程运行函数的起始地址
void *arg) //运行函数的参数当创建线程成功时,函数返回0,若不为0 则说明创建线程失败,常见的错误返回代码为EAGAIN 和EINVAL。
前者表示系统限制创建新的线程,例如线程数目过多了;
后者表示第二个参数代表的线程属性值非法。
创建线程成功后,新创建的线程则运行参数三和参数四确定的函数,原来的线程则继续运行下一行代码。
pthread_join用来等待指定的线程结束
int pthread_join(pthread_t th, //被等待的线程标识符
void **__thread_return); //用户定义指针,用来存储被等待线程的返回值
这个函数是一个线程阻塞的函数,调用它的函数将一直等待到被等
待的线程结束为止,当函数返回时,被等待线程的资源被收回。
pthread_exit线程主动退出
void pthread_exit(void *retval_ptr);
唯一的参数是函数的返回代码,只要pthread_join 中的第二个参数thread_return 不
是NULL,这个值将被传递给thread_return。最后要说明的是,一个线程不能被多个线程等
待,否则第一个接收到信号的线程成功返回,其余调用pthread_join 的线程则返回错误代
码ESRCH。
pthread_cancel撤销线程
int pthread_cancel(pthread_t id,void *retval_ptr);
互斥锁用来保证一段时间内只有一个线程在执行一段代码。
一 pthread_mutex_init
函数pthread_mutex_init用来生成一个互斥锁。NULL参数表明使用默认属性。
如果需要声明特定属性的互斥锁,须调用
函数 pthread_mutexattr_init、//设置属性pshared,它有两个取值, PTHREAD_PROCESS_PRIVATE(用来不同进程中的线程同步。默认)
和PTHREAD_PROCESS_SHARED(用于同步本进程的不同线程)
函数pthread_mutexattr_setpshared、//
函数 pthread_mutexattr_settype、//后者用来设置互斥锁类型,可选的类型有PTHREAD_MUTEX_NORMAL、PTHREAD_MUTEX_ERRORCHECK、 PTHREAD_MUTEX_RECURSIVE和PTHREAD _MUTEX_DEFAULT.
它们分别定义了不同的上所、解锁机制。
一般情况下,选用最后一个默认属性。用来设置互斥锁属性。
二 pthread_mutex_lock 、pthread_mutex_unlock 、pthread_delay_np
pthread_mutex_lock声明开始用互斥锁上锁,此后的代码直至调用pthread_mutex_unlock为止,均被上锁,即同一时间只能被一个线程调用执行。当一个线程执行到pthread_mutex_lock处时,如果该锁此时被另一个线程使用,那此线程被阻塞,即程序将等待到另一个线程释放此互斥锁。