POSIX 线程 也称为 PThreads
是一个POSIX 标准。
用pthread_create 来创建线程
int pthread_create(pthread_t* thread,pthread_attr_t const* attr,void *(start_routine)(void*),void*arg);
参数如下:
- 指向thread_t 类型变量的指针,函数 用该指针返回新线程的句柄。
- 指向pthread_attr_t结构的指针形式存在的新线程属性,可以通过该属性指定新线程的栈基址,栈大小,守护大小。默认为空 NULL
- 指向线程启动程序的函数指针,启动程序函数签名 格式void *(start_routine)(void*)
创建指针成功时候 返回 0,否则返回一个错误代码。
线程的基本使用方法·
- pthread_create():创建线程开始运行相关线程函数,运行结束则线程退出。
- pthread_eixt():因为 exit()使用来结束进程的,所以需要特定的结束线程的函数。
- pthread_join():挂起当前线程,用于阻塞式 等待线程结束,如果线程结束立即返回0 ==成功。
- pthread_cancel():发送终止信号给thread线程,成功返回0,但是成功不意味 pthread会终止。
- pthread_testcancel ():在不包含取消点,但是又需要取消点的地方创建一个取消点,以便在一个没有包含取消点的执行代码线程中响应取消请求。
- pthread_setcancelstate():设置本县城对cancle 线程的反应。
- pthread_setcanceltype():设置取消状态,继续运行至下一个取消点再退出或者 立即执行取消动作。
- pthread_setcancel():设置取消状态。
线程互斥与同步机制
- pthread_mutex_init():互斥锁的初始化
- pthread_mutex_lock():锁定互斥锁,如果尝试锁定已经被上锁的互斥锁则阻塞至可用为止。
- pthread_mutex_trylock():非阻塞的锁定互斥锁
- pthread_mutex_unlock():释放互斥锁
- pthread_mutex_destory():互斥锁销毁函数。
信号量线程控制机制
C/C++在使用信号量机制的时候,默认的信号量为匿名信号量。
- sem_init(sem):初始化一个定位在sem 的匿名信号量
- sem_wait():把信号量减1 操作,如果信号量的当前值 为0则进入阻塞,为原子操作。
- sem_trywait():如果信号量的当前值为0则返回错误而不是阻塞调用(errno=EAGAIN),其实是sem_wait()的非阻塞版本。
- sem_post():给信号量的值加1,它是一个原子操作,即 同时对同一个信号量做加1,操作的两个线程不会冲突。
- sem_getvalue(sval):把sem指向的信号量当前值放置在sval 指向的整数上。
- sem_destory (sem):销毁由sem 指向的匿名信号量。