线程基本编程——线程函数大全
- 格式:doc
- 大小:39.00 KB
- 文档页数:5
线程基本编程
索引:
1.创建线程pthread_create
2.等待线程结束pthread_join
3.分离线程pthread_detach
4.创建线程键pthread_key_create
5.删除线程键pthread_key_delete
6.设置线程数据pthread_setspecific
7.获取线程数据pthread_getspecific
8.获取线程标示符pthread_self
9.比较线程pthread_equal
10.一次执行pthread_once
11.出让执行权sched_yield
12.修改优先级pthread_setschedparam
13.获取优先级pthread_getschedparam
14.发送信号pthread_kill
15.设置线程掩码pthread_sigmask
16.终止线程pthread_exit
17.退出线程pthread_cancel
18.允许/禁止退出线程pthread_setcancelstate
19.设置退出类型pthread_setcanceltype
20.创建退出点pthread_testcancel
21.压入善后处理函数pthread_cleanup_push
22.弹出善后处理函数pthread_cleanup_pop
--------------------------------------------------------------------------------
1.创建线程pthread_create
#include
int pthread_create(pthread_t *tid, const pthread_attr_t *tattr, void *(*start_routine)(void *), void *arg);
返回值:函数成功返回0。任何其他返回值都表示错误。
创建一个线程。
参数tattr中含有初始化线程所需要的属性,start_routine是线程入口函数的地址,当start_routine返回时,相应的线程就结束了。
当函数成功时,线程标示符保存在参数tid指向的内存中。
如果不指定属性对象,将其置为NULL,则创建一个缺省的线程,有如下属性:
非绑定的;
未分离的;
由一个缺省大小的堆栈;
具有和父线程一样的优先级。
注意:在创建子线程时,传给子线程的输入参数最好是由malloc()函数返回的指针或指向全局变量的指针,而不要是指向局部变量的指针。要保证子线程处理参数时,该区域仍然有效。--------------------------------------------------------------------------------
2.等待线程结束pthread_join
#include
int pthread_join(pthread_t tid, void **status);
返回值:函数成功返回0。任何其他返回值都表示错误。
等待一个线程结束。
该函数阻塞调用它线程,直到参数tid指定的线程结束。
tid指定的线程必须在当前进程中,同时tid指定的线程必须是非分离的。
不能有多个线程等待同一个线程终止。如果出现这种情况,一个线程将成功返回,别的线程将返回错误ESRCH。
如果参数status不为NULL,则将线程的退出状态放在status指向的内存中。
--------------------------------------------------------------------------------
3.分离线程pthread_detach
#include
int pthread_detach(pthread_t tid);
返回值:函数成功返回0。任何其他返回值都表示错误。
将非分离的线程设置为分离线程。即通知线程库在指定的线程终止时回收线程占用的内存等资源。
在一个线程上使用多次pthread_detach的结果是不可预见的。
--------------------------------------------------------------------------------
4.创建线程键pthread_key_create
#include
int pthread_key_create(pthread_key_t *key, void (*destructor)(void*));
返回值:函数成功返回0。任何其他返回值都表示错误。
在进程中分配一个键值,这个键被用来表示一个线程数据项。这个键对进程中所有的线程都是可见的。刚创建线程数据键时,在所有线程中和这个键相关联的值都是NULL。
函数成功返回后,分配的键放在key参数指向的内存中,必须保证key参数指向的内存区的有效性。
如果指定了解析函数destructor,那么当线程结束时并且将非空的值绑定在这个键上,系统将调用destructor函数,参数就是相关线程与这个键绑定的值。绑定在这个键上的内存块可由destructor函数释放。
--------------------------------------------------------------------------------
5.删除线程键pthread_key_delete
#include
int pthread_key_delete(pthread_key_t key);
返回值:函数成功返回0。任何其他返回值都表示错误。
删除线程数据键。这个键占用的内存将被释放,该键再被引用将返回错误。
在调用该函数之前,程序必须释放和本线程相关联的资源,该函数不会引发线程数据键的解析函数。
--------------------------------------------------------------------------------
6.设置线程数据pthread_setspecific
#include
int pthread_setspecific(pthread_key_t key, const void *value);
返回值:函数成功返回0。任何其他返回值都表示错误。
设置和某个线程数据键绑定在一起的线程专用数据(一般是指针)。
函数不会释放原来绑定在键上的内存,给一个键值绑定新的指针时,必须释放原指针指向的