取消线程
可在当前线程中通过调用函数 pthread_cancle()来取消另一个线程,该线程由参数 thread 指
定。
#include <pthread.h>
int pthread_cancel(pthread_t thread);
int pthread_setcancelstate(int state,int * oldstate);
int pthread_setcanceltype(int type,int * oldtype);
void pthread_testcancel(void);
线程调用 pthread_setcancelstate() 设置自己的取消状态,参数 state 是新状态,参数
oldstate 是一个指针,指向存放旧状态的变量(如果不为空)函数 pthread_setcanceltype()修
改响应取消请求的类型,响应的类型有两种:
PTHREAD_CANCEL_ASYNCHRONOUS 线程被立即取消
PTHREAD_CANCEL_DEFERRED 延迟取消至取消点
取消点是通过调用 pthread_testcancel()来创建,如果延迟取消请求挂起,那么该函数将
取消当前线程。前三个函数成功时返回 0,失败时返回错误代码。
pthread_cond_init()函数
下列函数作用是挂起当前线程直到满足某种条件。
#include <pthread.h>
pthread_cond_t cond=PTHREAD_COND_INITIALIZER
int pthread_cond_init(pthread_cond_t * cond,pthread_condattr_t * cond_attr);
int pthread_cond_signal(pthread_cond_t * cond);
int pthread_cond_broadcast(pthread_cond_t * cond);
int pthread_cond_wait(pthread_cond_t * cond,pthread_mutex_t * mutex);
int pthread_cond_timedwait(pthread_cond_t * cond,pthread_mutex_t * mutex,const struct
timespec * abstime);
int pthread_cond_destroy(pthread_cond_t * cond);
函数 pthread_cond_init()初始化一个 pthread_cond_t 类型的对象 cond。在 Linux 中它的第二
个 参 数 被 忽 略 , 可 以 简 单 的 用 PTHREAD_COND_INITIALIZER 替 换 。
pthread_cond_destroy()是 cond 对象的析构函数,它仅检查是否还有线程在等待该条件。函
数 pthread_cond_signal()重启动一个等待某种条件的线程。pthread_cond_broadcast()重启动
所有的线程。函数 pthread_cond_wait()对一个互斥量进行解锁,并且等待条件变量 cond 中
的信号。pthread_cond_timedwait()函数作用与 pthread_cond_wait()相似,不过它只等待一段
由 abstime 指定的时间。
互斥
互斥锁用来保证一段时间内只有一个线程在执行一段代码。必要性显而易见:假设各个
线程向同一个文件顺序写入数据,最后得到的结果一定是灾难性的。API 定义如下:
#include <pthread.h>