POSIX线程(POSIXthreads),简称pthreads,是线程的POSIX标准。该标准定义了创建和操纵线程的一整套API。在类Unix操作系统(Unix、Linux、MacOSX等)中linux系统日志,都使用pthreads作为操作系统的线程。
因为近来学习过程中接触到了多线程,所以用到了pthread,在此写下自己的一些收获,也顺便给自己的耳朵加深印象。
pthread函数库的安装
pthread不是Linux下的默认的库,所以在linux环境下,有的有些系统没有安装有pthread,所以在编译有关多线程程序时android linux,也就是在程序链接的时侯,难以找到pthread库中函数的入口地址,于是链接会失败。所以在此我们必须先安装好pthread库。安装过程很简单使用下边命令即可。
sudoapt-getinstallglibc-doc
sudoapt-getinstallmanpages-posix-dev
之后再用man-kpthread就可以查找到当前manpages中关于pthread的指南
多线程小反例
安装好pthread库以后,我们就可以编撰自己的多线程小程序啦。下边是我自己弄的一个简单小反例。
main.c
#include
#include
void *thread_call(void*arg);
int main(void)
{
pthread_t thread_id;
int i,ret_num;
ret_num=pthread_create(&thread_id,NULL,thread_call,NULL);
if(ret_num!=0)
{
printf("The thread create failed!!n");
return -1;
}
for(i=0; i<3; i++)
printf("This is the main process.n");
pthread_join(thread_id,NULL);
return 0;
}
void *thread_call(void*arg)
{

int j;
for(j=0; j<3; j++)
{
printf("This is a pthread.n");
}
}
将上述代码保存为main.c文件,注意观察,我们头文件加入了pthread.h。接出来就可以进行编译了,在这个地方值得注意的是:pthread库不是Linux系统默认的库,联接时须要使用静态库libpthread.a,所以在编译的时侯须要链接该库。
所以在编译中要加-lpthread参数,命令为:
gccmain.c-lpthread-omain
运行上述命令就编译好了linux pthread库安装,生成可执行文件main。输入执行命令./main运行结果如下
注意:由于是多线程,输出结果的次序是不一定的linux pthread库安装,这个和计算机的性能有关,由于本程序比较小,看不出哪些疗效。
在代码中我用到了两个在多线程程序中常常用到的两个函数:创建线程函数pthread_create()和阻塞线程函数pthread_join()。下边我稍为对两个函数稍稍做一下讲解。
pthread_create(pthread_tthread,constpthread_attr_t*attr,void(start_routine)(void*),void*arg);
start_routine为新线程的入口函数,arg为传递给start_routine的参数。
每位线程都有自己的线程ID,函数第一个参数为线程id,便于在进程内分辨。线程ID在pthread_create调用时回返给创建线程的调用者。
pthread_join(pthread_tthread,void**threadreturn);
假如一个线程要等待另一个线程的中止,可以使用pthread_join函数,该函数的作用是调用pthread_join的线程将被挂起直至线程ID为参数thread的线程中止。第一个参数为线程id。
对上述的代码就剖析到此,有关pthread的操纵函数还有好多,百度pthread就可以全部看见,你们可以自己查阅,在这儿就不多说啦。