文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>linux多线程pthread

linux多线程pthread

时间:2009-07-23  来源:mycareer

  linux中的多线程使用了libpthread.a,因为在编译的时候需要加入该库-lpthread。多线程跟多进程不一样,线程是基于进程而存在的,线程之间共享了进程的数据,因为在使用多线程时,需要放置对共享数据的破坏。      linux多线程pthread的函数声明在<pthread.h>中,因此在使用该函数时,需要把该头文件引入。   线程的创建

1、创建

int pthread_create( pthread_t *restrict tidp, const pthread_attr_t *restrict attr, void *(* func) (void *), void *restrict arg );

attr: 线程属性包括:优先级、初始栈大小,是否应该成为一个守护线程。

缺省设置,NULL

tidp是要创建的线程,创建成功后tipd为先线程的id

 

void *(* func) (void *)是一个函数指针,该函数指针的类型为void* (*)(void *)

是一个参数为void *,返回值也为void *的函数类型。它的一个简单的例子如下

void *thread_handler(void *arg)

{

 return NULL;

}

void *restrict arg

中的arg是void *(* func) (void *)函数指针的参数。

补充:函数声明中多次出现了restrict,其实这是用于CPU对函数的优化使用的,restrict的使用,由程序员保证使用restrict标志的参数间不会有内存重叠。

 

获取线程自身的id

pthread_t pthread_self(void);

 

等待给定线程终止

int pthread_join( pthread_t tid, void **status);

statues返回等待线程的返回值

单个线程有三种退出方式

1.线程从启动例程中返回(return方式),返回值是现成的退出码

2.线程被同一进程内的其他线程取消

3.线程调用pthread_exit退出。void pthread_exit(void *rval_ptr)

 

线程清理处理程序

void pthread_clean_push(void (*rtn)(void *),void *arg)

void pthread_clean_pop(iny excute)

清理函数rtn的调用顺序是由pthread_clean_push函数安排的。

它在下列几种情况下执行:

1.调用pthread_exit时

2.响应取消请求时

3.用非零execute参数调用pthread_clean_pop时

如果execute参数为0,清理函数将不被调用。无论何种情况,pthread_clean_pop都将删除上次pthread_clean_push建立的清理处理程序。

如果线程使用return从例程返回,那么pthread_clean_push建立的清理处理程序不会被执行。

linux thread与fork的对比

 进程原语 线程原语  描述 
 fork pthread_create   创建新的控制流
 exit pthread_exit  从现有的控制流退出
 waitpid pthread_join  从控制流中得到退出状态
 atexit pthread_clean_push  注册在退出控制流时执行的函数
 getpid pthread_self  获得控制流ID
 abort pthread_cancel  请求控制流的非正常退出
相关阅读 更多 +
排行榜 更多 +
终极街头格斗

终极街头格斗

休闲益智 下载
大炮轰飞机

大炮轰飞机

飞行射击 下载
像素打僵尸

像素打僵尸

飞行射击 下载