关闭
关闭
首页 > 嵌入式软件 > linux

1、进程和线程的区别

本文引用地址: http://embed.21ic.com/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 Steam Beta 版将会在十月封测

Linux Steam Beta 版将会在十月封测

Valve 旗下的 Steam 一直以来都是 Windows 的好伙伴,不过他们的创办人 Gabe Newell 早前曾经高调说过:「Windows 8 是一场灾难」,并会将 Steam 平台移植到 Linux 作为「避险策略」。直到现在......

关键字:Linux Steam Beta 封测

[新鲜事] Twitter 成为 Linux 基金会新成员

Twitter 成为 Linux 基金会新成员

继英伟达和三星之后,Twitter 日前宣布他们也将于本周在加州举行的北美站 LinuxCon 大会上正式成为 Linux 基金会的成员(英特尔、IBM、Google 等:「鼓掌欢迎!」)。Twitter 的开源业务经理 Chris An......

关键字:Twitter Linux 基金会

[猎聘集] 全世界最成功的程序员:远见卓识会毁了Linux

全世界最成功的程序员:远见卓识会毁了Linux

Linux发明者称,正因为我不知道它将来会怎样,所以我对别人的建议和影响才表现得格外开放。......

关键字:程序员 Linux 开源

[真心话] Windows、Linux、OS X 版 Opera 12.10 正式发布:支持 Windows 8 触控、Retina 屏幕、SPDY 协议

Windows、Linux、OS X 版 Opera 12.10 正式发布:支持 Windows 8 触控、Retina 屏幕、SPDY 协议

Opera 日前正式在 Windows、Linux、OS X 三大平台上推出了 12.10 版本。作为 Opera 12 的后续版本,Opera 12.10 新加入了对 OS X 通知中心、Retina 屏幕、Windows 8 触控......

关键字:Windows Retina Linux 12.10

[新鲜事] CentOS系统宣布为ARM(armhfp)硬件架构发布CentOS Linux 7(1611)镜像

CentOS系统宣布为ARM(armhfp)硬件架构发布CentOS Linux 7(1611)镜像

今天,CentOS系统开发人员Fabian Arrotin非常高兴的宣布为ARM(armhfp)硬件架构发布CentOS Linux 7(1611)镜像。该GNU/Linux发行版本深受单板计算机和嵌入式设备的喜爱,支持树莓派3、树莓派2、......

关键字:ARM CentOS Linux

[新鲜事] Linux之父怒喷谷歌安全工程师为哪般?

Linux之父怒喷谷歌安全工程师为哪般?

上周五,Linux 之父 Linus Torvalds 在内核邮件列表上用很犀利的言辞抨击了 Google Pixel 安全团队的开发者 Kees Cook,引起了大家广泛地讨论。......

关键字:Linux 谷歌 安全工程师

[新鲜事] Linux内核修复Ryzen线程数目识别错误,多线程性能将会飙升

Linux内核修复Ryzen线程数目识别错误,多线程性能将会飙升

Linux已经在官网发布最新的内核修复这一问题,预计Ryzen 7处理器又能纵横在Linux系统上。......

关键字:Linux内核 Ryzen 多线程

[新鲜事] Valve老大G胖:支持Linux因Win8是个灾难

Valve老大G胖:支持Linux因Win8是个灾难

华尔街日报》旗下科技博客AllThingsD报道,昨日Valve老大Gabe Newell出席了由Google风投等私募公司在西雅图举行的一场晚宴,期间和前微软游戏发行部门副总裁Ed Fries谈到了他近期对业界一些的看法。Valve在上周......

关键字:Valve Linux Win8

[新鲜事] 针对 Linux 的木马程序Wirenet出现

针对 Linux 的木马程序Wirenet出现

以往Linux其中一个卖点是“没有病毒”,然而Linux日益普及却令它也开始成为恶意程式的目标。根据俄罗斯保安方案开发商Dr Web的报告、继 Mac OS X之后,在Linux也发现了意图取得用户密码的木马程序。 ......

关键字:Wirenet Linux 木马 程序

[新鲜事] Windows、Mac、Linux 3 版 Skype 更新齐发

Windows、Mac、Linux 3 版 Skype 更新齐发

在今天一天内 Windows、Mac、Linux 3 个平台上的 Skype 都获得了更新。在 Windows 版本中 UI 得到了一些改进,包括可以将联系人「钉」到联系人列表顶部、在配置较差的电脑上加入了影像渲染的反向兼容性以及更好的 ......

关键字:Windows Linux Skype Mac

[真心话] 神技能get:实现1秒启动Linux?

神技能get:实现1秒启动Linux?

尽可能快的启动系统,对于自动化设备是非常重要的。系统能够在用户无法感知的时间内启动,也就意味着在不需要工作时,可以完全切断电源,而不是挂起进入休眠状态。本文基于Atmel AT91系列片上系统和NAND闪存,经过一......

关键字:Linux 自动化设备 启动 系统

[新鲜事] Facebook :Android 平台照片自动同步功能测试中

Facebook :Android 平台照片自动同步功能测试中

相较于之前的并购案,这次 Facebook 有关相片功能的更新看起来不是什么大事,但若您经常使用 Android 版的 Facebook 应用程序来纪录生活大小事,那么正在测试阶段的照片同步功能应该蛮符合您的需求。等等,这个东西......

关键字:Facebook Android 自动同步 功能测试
条评论

我 要 评 论

网友评论

大家都爱看

  • 华为的优势,就是自家的各种自研芯片

    CPU即中央处理器,是一块超大规模的集成电路,是一台计算机的运算核心和控制核心。它的功能主要是解释计算机指令以及处理计算机软件中的数据。

    2017-08-16
  • 你不知道Ryzen芯片有多火?来看看AMD的股票吧

    据外媒报道,美银美林认为,AMD最新的Ryzen芯片可能会引发一波销售浪潮,进而推动该股继续上涨。它认为AMD股票还有40%以上的上涨空间。

    2017-08-16
  • 国产芯片:厚积薄发,强势崛起

    关于国产芯片,是近几年才有崛起的势头,可是在几年之前,国产芯片还处于“沉睡”的状态,尤其是手机芯片,几乎大部分都依赖进口,而且国外的市场几乎被高通和联发科所垄断,也就展讯还在市场边…

    2017-08-16
  • 为了数据安全 大疆无人机增加隐私飞行功能

    大疆周一表示,在美国陆军因为“网络缺陷”而要求其成员停用大疆无人机后,这家中国无人机制造商将加强无人机的数据安全性。 大疆政策和法务副总裁布伦丹&middot…

    2017-08-15
  • Intel代工 展讯发布14nm SC9853I手机SoC

    SC9853I采用的Intel的14nm FinFET制程,架构为8核64位Airmont架构,主频1.8GHz,GPU为Mali-T820 MP2,号称面向799~1299元档次的手机。…

    2017-08-15