1.创建线程:pthread_t 实质上是unsigned long int 类型。
extern int pthread_create(pthread_t *__restrict __newthread,
__const pthread_attr_t *__restrict __attr,
__void *(*__start_routine)(void *),
void * __restrict __arg);
第一个参数用来存储线程ID,参数为指向线程ID的指针;
第二个参数用来设置线程属性。一般为NULL,这时使用系统默认的属性。
第三个参数是线程运行的代码起始地址,即在此线程中运行哪些代码。
第四个参数是运行函数的参数地址。如果需要给自定义的函数传入多个参数,则需要使用一个包含这些参数的结构体地址。
成功则返回0,失败则返回非0值。
2.退出线程:
extern void pthread_exit(void * __retval);
3.等待线程:
extern int pthread_join (pthread_t __th, void ** __thread_return);
此函数将阻塞调用当前线程的进程,直到此线程退出。成功则返回0;失败则返回非0。
4.设置独立线程:
extern int pthread_detach (pthread_t __th);
成功则将该线程与当前进程分离,使其成为一个独立的线程,并返回0。资源由系统回收。
5.线程退出前操作:
void pthread_cleanup_push(void (*routine)(void *), void * arg);
void pthread_cleanup_pop(int execute);
push为压入清理函数栈,多次调用pthread_cleanup_push()将在清理函数栈中形成一个函数链,在执行函数链时按照压栈的相反顺序弹出;
execute表示是否在弹出清理函数的同时执行该函数。0为不执行,非0为执行。
tppsdf
6.取消线程:
extern int pthread_cancel(pthread_t __cancelthread);
它将调用线程的取消清理处理程序(pthread_cleanup_push函数);
成功则返回0;否则返回错误编号;是异步执行的。
7.设置取消类型:
extern int pthread_setcanceltype(int __type, int *__oldtype);
8.设置可取消状态:
extern int pthread_setcancelstate(int __state, int *__oldstate);
9.线程与私有数据:
int pthread_key_create(pthread_key_t *key, void (*destr_function) (void *) );
不论哪个线程调用pthread_key_create(),所创建的key都是所有线程可访问的,但各个线程可根据自己的需要往key中填入不同的值,相当于提供了一个同名而不同值的全局变量。
注销一个TSD采用:
int pthread_key_delete(pthread_key_t key);
10.读写线程私有数据:
int pthread_setspecific(pthread_key_t key, const void * pointer)
void * pthread_getspecific(pthread_key_t key);