首页 > 嵌入式软件 > linux

1、进程和线程的区别

本文引用地址: http://www.21ic.com/embed/software/linuxos/201712/49652.html

进程的目的就是担当分配系统资源(CPU时间、内存等)的基本单位。线程是进程的一个执行流,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。一个进程由几个线程组成,线程与同属一个进程的其他的线程共享进程所拥有的全部资源。

地址空间:进程有独立的地址空间,包括文本区域(text region)、数据区域(data region)和堆栈(stack region);一个进程崩溃后,在保护模式下不会对其它进程产生影响;线程只是一个进程中的不同执行路径,线程有自己的堆栈和局部变量(在运行中必不可少的资源),但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉。同一进程内的线程共享进程的地址空间。

通信:进程间通信IPC,线程间可以直接读写进程数据段(如全局变量)来进行通信——需要进程同步和互斥手段的辅助,以保证数据的一致性。

调度和切换:线程上下文切换比进程上下文切换要快得多。

在多线程OS中,进程不是一个可执行的实体。

地址空间:进程内的一个执行单元;进程至少有一个线程;它们共享进程的地址空间;而进程有自己独立的地址空间;

资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源

线程是处理器调度的基本单位,但进程不是.

二者均可并发执行.

2、使用线程原因

在Linux系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这是一种"昂贵"的多任务工作方式。而运行于一个进程中的多个线程,它们彼此之间使用相同的地址空间,共享大部分数据,启动一个线程所花费的空间远远小于启动一个进程所花费的空间,而且,线程间彼此切换所需的时间也远远小于进程间切换所需要的时间。

线程间方便的通信机制。对不同进程来说,它们具有独立的数据空间,要进行数据的传递只能通过通信的方式进行,这种方式不仅费时,而且很不方便。线程则不然,由于同一进程下的线程之间共享数据空间,所以一个线程的数据可以直接为其它线程所用,这不仅快捷,而且方便。

3、线程操作的函数

#include

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

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

pthread_t pthread_self (void);

int pthread_detach (pthread_t tid);

void pthread_exit (void *status);

pthread_create:用于创建一个线程,成功返回0,否则返回Exxx(为正数)。

pthread_t *tid:线程id的类型为pthread_t,通常为无符号整型,当调用pthread_create成功时,通过*tid指针返回。

const pthread_attr_t *attr:指定创建线程的属性,如线程优先级、初始栈大小、是否为守护进程等。可以使用NULL来使用默认值,通常情况下我们都是使用默认值。

void *(*func) (void *):函数指针func,指定当新的线程创建之后,将执行的函数。

void *arg:线程将执行的函数的参数。嵌入式系统学习意义气呜呜吧久零就易,如果想传递多个参数,请将它们封装在一个结构体中。

pthread_join:用于等待某个线程退出,成功返回0,否则返回Exxx(为正数)。

pthread_t tid:指定要等待的线程ID

void ** status:如果不为NULL,那么线程的返回值存储在status指向的空间中(这就是为什么status是二级指针的原因!这种才参数也称为“值-结果”参数)。

pthread_self:用于返回当前线程的ID。

pthread_detach:用于是指定线程变为分离状态,就像进程脱离终端而变为后台进程类似。成功返回0,否则返回Exxx(为正数)。变为分离状态的线程,如果线程退出,它的所有资源将全部释放。而如果不是分离状态,线程必须保留它的线程ID,退出状态直到其它线程对它调用了pthread_join。

pthread_exit用于终止线程,可以指定返回值,以便其他线程通过pthread_join函数获取该线程的返回值。

void *status:指针线程终止的返回值。

4、线程间互斥

使用互斥锁(互斥)可以使线程按顺序执行。通常,互斥锁通过确保一次只有一个线程执行代码的临界段来同步多个线程。互斥锁还可以保护单线程代码。

int pthread_mutex_lock(pthread_mutex_t * mptr);

int pthread_mutex_unlock(pthread_mutex_t * mptr);

先声明一个pthread_mutex_t类型的变量,用作下面两个函数的参数。在对临界资源进行操作之前需要pthread_mutex_lock先加锁,操作完之后pthread_mutex_unlock再解锁。

5、线程间同步

条件变量:使用条件变量可以以原子方式阻塞线程,直到某个特定条件为真为止。条件变量始终与互斥锁一起使用。对条件的测试是在互斥锁(互斥)的保护下进行的。

#include

int pthread_cond_wait(pthread_cond_t *cptr, pthread_mutex_t *mptr);

int pthread_cond_signal(pthread_cond_t *cptr);

//Both return: 0 if OK, positive Exxx value on error

pthread_cond_wait用于等待某个特定的条件为真,pthread_cond_signal用于通知阻塞的线程某个特定的条件为真了。在调用者两个函数之前需要声明一个pthread_cond_t类型的变量,用于这两个函数的参数。

/*

是否熟悉POSIX多线程编程技术?如熟悉,编写程序完成如下功能:

1)有一int型全局变量g_Flag初始值为0;

2)在主线称中起动线程1,打印“this is thread1”,并将g_Flag设置为1

3)在主线称中启动线程2,打印“this is thread2”,并将g_Flag设置为2

4)线程序1需要在线程2退出后才能退出

5)主线程在检测到g_Flag从1变为2,或者从2变为1的时候退出

换一批

延伸阅读

[行业资讯] 开源平台化成科技公司必由之路 包括微软

开源平台化成科技公司必由之路 包括微软

曾经的科技市场有自己的玩法,那就是通过占有独一无二的资源来获取强大的议价能力。不过,现在新趋势正在逐渐瓦解这一传统玩法,公司向平台化发展并与人才、技术和信息生态......

关键字:Linux 微软

[行业资讯] Linux Kernel 5.0或在达成600万Git Objects时到来

Linux Kernel 5.0或在达成600万Git Objects时到来

早两天,Linus Torvalds在Google+上表示,Linux内核当前正在从4.0向5.0大版本迈进(half-way between),同时接近600万Git的目标。之前的大版本,比如Linux 3.0或Linux 4.0......

关键字:Linux5.0

[行业资讯] 2016年最佳Linux发行版排行榜

2016年最佳Linux发行版排行榜

2015年,不管在企业市场还是个人消费市场都是 Linux 非常重要的一年。作为一个自2005年起就开始使用 Linux 的 Linuxer ,我门见证了 Linux 在过去十年的成长。2016 Linux......

关键字:ezgo Linux openSUSE Linux

[行业资讯] Linux基金会宣布举办新会议,支持开源大数据社区协作

Linux基金会宣布举办新会议,支持开源大数据社区协作

Apache: Big Data大会,开源项目提交者将汇聚一堂,促进Apache大数据技术的应用Marketwired 2015年5月28日美国加利福尼亚州旧金山消息――致力于促进Linux和协作开发发展的......

关键字: Linux 开源大数据

[行业资讯] IDT同步设备时间源与通用频率转换器提供可扩展解决方案

IDT同步设备时间源与通用频率转换器提供可扩展解决方案

加利福尼亚州圣何塞市, Integrated Device Technology, Inc. (IDT)为其产品组合新推出了 SyncE(同步以太网)解决方案,其中包含新的 SETS(同步设备定时源)设备和第三代通用......

关键字: IDT 同步以太网 UFTTM SETS

[疯狂史] PCB设计软件大解析,哪一款才是你的菜?

PCB设计软件大解析,哪一款才是你的菜?

PCB(Printed Circuit Board)设计软件经过多年的发展、不断地修改和完善,或优存劣汰、或收购兼并、或强强联合,现在只剩下Cadence和Mentor两家公司独大。“......

关键字:PCB设计软件

[新鲜事] 美国物理学家爆猛料:外星人已经对人类下手了

美国物理学家爆猛料:外星人已经对人类下手了

就在世人对外星人的存在还将信将疑的时候,美国75岁物理学家斯坦顿·弗里德曼(Stanton Friedman)声称,自己确信外星生物曾到访过地球,并且外星生物在地球上停留很长时间。外星人曾经还劫持过地球人去做实验,这些资料目前被美国政府扣押......

关键字:外星人

[新鲜事] 阿根廷队告别俄罗斯世界杯,罗永浩:梅西巅峰期已过

阿根廷队告别俄罗斯世界杯,罗永浩:梅西巅峰期已过

6月30日晚,俄罗斯世界杯的赛场上上演16强焦点之战,阿根廷对法国。面对拥有身高、年龄、速度等优势,并坚持打高吊、防反的法国队,阿根廷队显得没有什么办法。虽然两次被幸运女神眷顾并一度以2:1领先,但法国队最......

关键字:阿根廷 世界杯
条评论

我 要 评 论

网友评论

大家都爱看

  • 扇出型晶圆级封装的优势和挑战!

    我们有能力创造一些能保持前代性能并且更好更小的电子设备,例如今天的可穿戴设备、智能手机或平板电脑,这是由于很多因素超过摩尔定律而快速发展,从而能够从底层的嵌入组件发展到今天把它们封…

    2018-03-29
  • Xilinx推出革命性的新型自适应计算产品

    自适应和智能计算的全球领先企业赛灵思公司(Xilinx, Inc.,(NASDAQ:XLNX)),近日宣布推出一款超越FPGA功能的突破性新型产品,名为ACAP(Adaptive Compute Acceleration Platform,自适应计算加速…

    2018-03-20
  • 赛普拉斯为树莓派3 B+ IoT单板计算机提供强大稳定的无

    先进嵌入式系统解决方案的领导者赛普拉斯(纳斯达克代码:CY)近日宣布其Wi-Fi®和蓝牙®combo解决方案为全新的树莓派 3 B+(Raspberry Pi 3Model B+)IoT单板计算机提供强大稳定的无线连接…

    2018-03-20
  • 观看直播领红包,SEED-A10加速卡助力人工智能

    随着云服务器、云计算的发展,大家对硬件加速的需求越来越多,但是随着设备功耗的上升、性能需求越来越高,常规加速设备以及开始不能满足需求,因此FPGA逐渐在硬件加速中找到了自己的位置,而艾…

    2018-03-19
  • 特朗普:博通不得以任何形式收购高通

    白宫周一(3月12日)晚发出声明,川普(特朗普)总统出于“国家安全”考量、禁止新加坡博通公司(Broadcom)收购美国高通公司(Qualcomm)。

    2018-03-14