pthread_create()
int pthread_create(pthread_t *tidp,const pthread_attr_t *attr,(void*)(*start_rtn)(void*),void *arg);
第一个参数为指向线程标识符的指针。第二个参数用来设置线程属性。第三个参数是线程运行函数的起始地址。最后一个参数是运行函数的参数。
第二个参数可以用NULL,最后一个参数如果运行函数没有参数的话也用NULL。
pthread_join()
int pthread_join(pthread_t thread, void \*\*retval);
参数 :thread: 线程标识符,即线程ID,标识唯一线程。retval: 用户定义的指针,用来存储被等待线程的返回值。
以阻塞的方式等待thread指定的线程结束。当函数返回时,被等待线程的资源被收回。如果线程已经结束,那么该函数会立即返回。并且thread指定的线程必须是joinable的。
pthread_testcancel()
关于线程取消:https://www.cnblogs.com/tianzeng/p/9195091.html
取消线程:告诉某一个线程应该关闭了。取消操作允许线程请求终止其所在进程中的任何其他线程。不希望或不需要对一组相关的线程执行进一步操作时,可以选择执行取消操作。取消线程的一个示例是异步生成取消条件。
对于cancel信号,线程有两种方法: 忽略,和响应。默认是响应
接收到cancel信号,线程有两种处理类型: 立即响应 和 延迟响应(在最近的取消点响应),默认是延迟响应。
//发送终止信号给thread线程,如果成功则返回0,否则为非0值。发送成功并不意味着thread会终止。
int pthread_cancel(pthread_t thread);
//设置本线程对Cancel信号的反应,state有两种值:PTHREAD_CANCEL_ENABLE(缺省)和PTHREAD_CANCEL_DISABLE,
//分别表示收到信号后设为CANCLED状态和忽略CANCEL信号继续运行;old_state如果不为NULL则存入原来的Cancel状态以便恢复。
int pthread_setcancelstate(int state, int *oldstate);
//设置本线程取消动作的执行时机,type由两种取值:PTHREAD_CANCEL_DEFFERED和PTHREAD_CANCEL_ASYCHRONOUS,
//仅当Cancel状态为Enable时有效,分别表示收到信号后继续运行至下一个取消点再退出和立即执行取消动作(退出)
//oldtype如果不为NULL则存入运来的取消动作类型值。
int pthread_setcanceltype(int type, int *oldtype);
//pthread_testcancel在不包含取消点,但是又需要取消点的地方创建一个取消点,以便在一个没有包含取消点的执行代码线程中响应取消请求.
//线程取消功能处于启用状态且取消状态设置为延迟状态时,pthread_testcancel()函数有效。
//如果在取消功能处处于禁用状态下调用pthread_testcancel(),则该函数不起作用。
//请务必仅在线程取消线程操作安全的序列中插入pthread_testcancel()。除通过pthread_testcancel()调用以编程方式建立的取消点意外,
//pthread标准还指定了几个取消点。测试退出点,就是测试cancel信号.
void pthread_testcancel(void)
pthread_mutex
- 创建mutex:
#include <pthread.h>
pthread_mutex_tamutex= PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_init(&amutex, NULL);
- 使用mutex:
int pthread_mutex_lock(&amutex);// 加锁,若已上锁则阻塞至被解锁
int pthread_mutex_trylock(&amutex);
// 加速,若已上锁不阻塞,返回非0
int pthread_mutex_unlock(&amutex); // 解锁,可能令其他线程退出阻塞
- 释放mutex:
int pthread_mutex_destroy(&amutex);