博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
pthread/Linux 简单多线程编程
阅读量:2255 次
发布时间:2019-05-09

本文共 1839 字,大约阅读时间需要 6 分钟。

POSIX线程(POSIX threads),简称pthreads,是线程的POSIX标准。该标准定义了创建和操纵线程的一整套API。在类Unix操作系统(Unix、Linux、Mac OS X等)中,都使用pthreads作为操作系统的线程。

由于最近学习过程中接触到了多线程,所以用到了pthread,在此写下自己的一些收获,也顺便给自己的脑袋加深印象。

pthread函数库的安装

pthread不是Linux下的默认的库,所以在linux环境下,有的有些系统没有安装有pthread,所以在编译有关多线程程序时,也就是在程序链接的时候,无法找到pthread库中函数的入口地址,于是链接会失败。所以在此我们必须先安装好pthread库。安装过程很简单使用下面命令即可。

sudo apt-get install glibc-doc

sudo apt-get install manpages-posix-dev

然后再用man -k pthread就可以查找到当前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参数,命令为:

gcc main.c -lpthread -o main

运行上述命令就编译好了,生成可执行文件main。输入执行命令./main 运行结果如下

这里写图片描述

注意:因为是多线程,输出结果的顺序是不一定的,这个和计算机的性能有关,因为本程序比较小,看不出什么效果。

在代码中我用到了两个在多线程程序中经常用到的两个函数:创建线程函数pthread_create()和阻塞线程函数pthread_join()。下面我稍微对两个函数稍微做一下讲解。

pthread_create(pthread_t thread, const pthread_attr_t *attr, void (start_routine)(void*), void *arg);

start_routine为新线程的入口函数,arg为传递给start_routine的参数。

每个线程都有自己的线程ID,函数第一个参数为线程id,以便在进程内区分。线程ID在pthread_create调用时回返给创建线程的调用者。

pthread_join (pthread_t thread, void** threadreturn);

如果一个线程要等待另一个线程的终止,可以使用pthread_join函数,该函数的作用是调用pthread_join的线程将被挂起直到线程ID为参数thread的线程终止。第一个参数为线程id。

对上述的代码就分析到此,有关pthread的操纵函数还有很多,百度pthread 就可以全部看到,大家可以自己查阅,在这里就不多说啦。

你可能感兴趣的文章
linux MTD FALSH管理设计
查看>>
Android2.3 MediaPlayer系统祥解系列(概述)
查看>>
android 属性系统使用
查看>>
andoird --- XmlPullParser 的使用
查看>>
Android --- 读取系统资源 getResources
查看>>
世界上超难找的药方
查看>>
Android ----waiting for debugger
查看>>
视频基础知识-封装格式和编码格式
查看>>
android --- 几个小问题记录
查看>>
如何根据meta-data内容杀指定应用
查看>>
linux --- inotify 文件系统变化通知机制
查看>>
成功人士,默默做的30件事 (4-6)
查看>>
创业,先要炼就一双好眼睛
查看>>
IT人为什么拿不到高薪
查看>>
Adodb 官方介绍
查看>>
个人价值的体现
查看>>
LINUX常用命令
查看>>
PHP中post与get的区别
查看>>
CFileDialog用法
查看>>
文件操作
查看>>