[原创]手把手教你Linux下的多线程设计--Linux下多线程编程详解(一)
本文可任意转载,但必须注明作者和出处。
【原创】手把手教你Linux下的多线程设计(一)
--Linux下多线程编程详解
原创作者:Frozen_socker(冰棍)
E_mail:dlskyfly@163.com
线程也被称为轻权进程(lightweight process)。
在传统的UNIX上,一个进程让另一个实体做某个事务是用fork派生子进程的方法处理的。派生子进程的代价比线程要昂贵得多,尤其是在父子进程之间、子进程之间传递信息需要用IPC或其他方法通信。相对比,使用线程有许多优点,如创建线程要比创建进程快的多、一个进程中的线程共享相同的全局存储区等等。
Linux系统下的多线程遵循POSIX线程接口,称为pthread,在Linux中,多线程需要使用的头文件为<pthread.h>,连接时需要使用库为libpthread.a。
我们编写一个非常简单的例子:
//example_1.c
#include <stdio.h>
#include <pthread.h>
void * pthread_func_test(void * arg);
int main()
...{
pthread_t pt1,pt2;
pthread_create(&pt1,NULL,pthread_func_test,"This is the Thread_ONE");
pthread_create(&pt2,NULL,pthread_func_test,"This is the Thread_TWO");
sleep(1); //不加上这句,看不到结果。
}
void * pthread_func_test(void * arg)
...{
printf("%s /n ",arg);
}
编译源文件:
gcc example_1.c -o example -lpthread
编译环境:
平 台:FC6
版 本:2.6.18-1.2798.fc6
编译器:gcc 4.1.1 20070105 (Red Hat 4.1.1-51)
运行可执行文件:
./example
在终端上的输出结果:
This is the Thread_ONE
This is the Thread_TWO
在example_1这个例子中,一共产生了三个线程,第一个就是main所代表的主线程,另外两个就是pt1和pt2分别代表的两个分支线程,这两个线程由pthread_create函数创建,执行的内容就是写在函数pthread_func_test里的东东。
上例涉及到的函数是:pthread_create()
函数原型如下:
int pthread_create(pthread_t *restrict thread,
const pthread_attr_t *restrict attr,
void *(*start_routine)(void*), void *restrict arg);
参数点解:
1、每个线程都有自己的ID即thread ID,可以简称tid,呵呵,是不是想起什么来了?。。。对,和pid有点象。其类型为pthread_t,pthread_t在头文件/usr/include/bits/pthreadtypes.h中定义:
typedef unsigned long int pthread_t;
可以看成是线程的标志符。当成功创建一个新线程的时候,系统会为该线程分配一个tid,并将该值通过指针返回给调用它的程序。
2、attr申明线程的属性。
属性结构为pthread_attr_t,它在头文件/usr/include/pthread.h中定义。设为NULL,表示在这里我们只使用线程的默认属性就可以了。
3、start_routine表示新创建的线程所要执行的例程。线程以调用该函数开始,直到由该函数返回(return)终止这个线程,或者在start_routine所指向的函数中调用pthread_exit函数终止。start_routine只有一个参数,该参数由随后的arg指针来指出。
4、arg:也是一个指针,也就是start_routine指针所指向的函数的参数。
返回值:
当pthread_create调用成功时,该调用返回0;否则,返回一个错误代码指出错误的类型。
欢迎您发邮件与我交流,但因为工作和时间的关系,我有权对您提出的一些问题不予回答,敬请见谅。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/Frozen_fish/archive/2007/07/05/1679491.aspx
[原创]手把手教你Linux下的多线程设计--Linux下多线程编程详解(一)相关推荐
- 手把手教你玩转SOCKET模型:完成端口(Completion Port)详解
这篇文档我非常详细并且图文并茂的介绍了关于网络编程模型中完成端口的方方面面的信息,从API的用法到使用的步骤,从完成端口的实现机理到实际使用的注意事项,都有所涉及,并且为了让朋友们更直观的体会完成端口 ...
- B站教学 手把手教你使用YOLOV5之口罩检测项目 最全记录详解 ( 深度学习 / 目标检测 / pytorch )
目录 一.环境搭建 pytorch的下载 测试(cmd窗口中) pycharm下测试(要配置pycharm中的虚拟环境) 二.数据标注 下载labor image 使用labelimg进行图片标注 划 ...
- 手把手教你如何将安卓手机数据导入iPhone!【详解】
案例:安卓数据导入苹果手机 [大神们,刚换了新的苹果手机,原本的安卓手机数据怎么导入新手机?] 想要换用iPhone,但是又不想丢失安卓手机里的重要数据怎么办?如何将安卓手机数据导入iphone?本文 ...
- 【换脸详细教程】手把手教你进行AI换脸:换脸流程及源码详解
目录 1. 换脸基本原理 2 人脸检测及可视化 3. 人脸轮廓点检测及可视化 4. 人脸图像变换--仿射变换 5. 生成遮罩并直接替换人脸 6. 人脸颜色校正 最近AI换脸貌似比较火爆,就稍微研究了一 ...
- 手把手教你用 TensorFlow 实现文本分类(下)
手把手教你用 TensorFlow 实现文本分类(下) 本文作者:AI研习社 2017-05-29 13:36 导语:文本分类全流程解析. 雷锋网(公众号:雷锋网)按:本文作者张庆恒,原文载于作者个人 ...
- 手把手教你如何在win7(windows7)下进行java环境变量配置
手把手教你如何在win7(windows7)下进行java环境变量配置 我是个很懒的人,学习了3周java后,一直用Myeclipse编程.今天中午有空,自己尝试了一下在dos环境下编程.前提是jav ...
- 创建三个并发进程linux,Linux下几种并发服务器的实现模式(详解)
1>单线程或者单进程 相当于短链接,当accept之后,就开始数据的接收和数据的发送,不接受新的连接,即一个server,一个client 不存在并发. 2>循环服务器和并发服务器 1.循 ...
- 1 linux下tcp并发服务器的几种设计的模式套路,Linux下几种并发服务器的实现模式(详解)...
1>单线程或者单进程 相当于短链接,当accept之后,就开始数据的接收和数据的发送,不接受新的连接,即一个server,一个client 不存在并发. 2>循环服务器和并发服务器 1.循 ...
- dns日志级别 linux,linux下DNS服务器视图view及日志系统详解
linux下DNS服务器视图view及日志系统详解DNS服务器ACL:在named.conf文件中定义ACL功能如同bash当中定义变量,便于后续引用 ACL格式: acl ACL名称 { IP地址1 ...
最新文章
- 零基础学Java大数据难不难
- 不同职业阶段的修炼: 多与少
- SimpleDateFormat处理 dd-MMM-yy类型日期
- 利用Azure Backup备份和恢复虚拟机(2)
- oracle创建外键约束的两种方式
- 前端解读控制反转(IOC)
- percona-toolkit---pt-heartbeat
- ARM Cortex-M0(6)--- 存储器系统
- jQuery.ajax()方法
- 【MLNLP顶会论文发表总榜】谷歌最狂,清北入前十,周明、张岳、刘挺华人前三,中美差距何止一点点!...
- 浅读vue-router源码,了解vue-router基本原理
- jQuery实现清空table表格除首行外的所有数据
- 工具:sql server profiler(分析器)
- VC6.0内存泄露检测工具
- 工程量计算专用工具-支持灌注桩、搅拌桩、格构柱
- 2 errors and 0 warnings potentially fixable with the `--fix` option.(Vue后台管理系统)
- micro、macro、weighted、sample区别
- Vue3+tsx开发语法详解
- java.lang.ClassNotFoundException:如何解决
- 向所有苦苦拼搏的而立之年的男人们推荐这个电影《老男孩》
热门文章
- python 翻转棋(othello)
- Linux下的进程PCB以及线程详解
- 使用计算机翻译的是,利用计算机进行中英文翻译的探讨
- qq飞车手游显示服务器连接失败,QQ飞车手游出现系统错误怎么解决?出现系统错误问题解决方法[多图]...
- windows蓝屏错误代码查询
- 手机九宫格滑动解锁方法种数(389112种)
- org.hibernate.MappingException: Unknown entity: dxm.com.vo.User
- 如何删除/选择电脑上的输入法
- 计算机多媒体对语文教学的提高,计算机多媒体技术在语文教学的应用
- Windows 罕见技巧全集1