线程

我们知道 ,进程在各自独立的地址空间中运行,进程之间共享数据需要用mmap或者进程间通信机制,本节我们学习如何在一个进程的地址空间中执行多个线程。有些情况需要在一个进程中同时执行多个控制流程,这时候线程就派上了用场,比如实现一个图形界面的下载软件,
一方面需要和用户交互,等待和处理用户的鼠标键盘事件,另一方面又需要同时下载多个文件, 等待和处理从多个 网络主机发来的数据,这些任务都需要一个“等待-处理”的循环,可以用多线程实现,一个线程专门 负责与用户交互,另外几个线程每个线程负责和一个网络主机通信。

以前我们讲过,main函数和信号处理函数是同一个进程地址空间中的多个控制流程,多线程也是如此,但是比信号处理函数更加灵活,信号处理函数的控制流程只是在信号递达时产生,在处理完信号之后就结束,而多线程的控制流程可以长期并存,操作系统会在各线程之间调度和切换,就像在多个进程之间调度和切换一样

由于同一进程的多个线程共享同一地址空间,因 此Text Segment、Data Segment都是共享的,如果定义一个函数,在各线程中都可以调用,如果定义一个全局变量,在各线程中都可以访问到,除此之外,各线程还共享以下进程资源和环 境:

1. 文件描述符表

2. 每种信号的处理方式(SIG_IGN、SIG_DFL或者自定义的信号处理函数)

3. 当前工作目录

4. 用户id和组id

但是线程也有私有的资源:

1. 线程id

2. 上下文,包括各种寄存器的值、程序计数器和栈指针

3. 栈空间

4. errno变量

5. 信号屏蔽字

6. 调度优先级

在Linux 上线程函数位于libpthread共享库中,因此在编译时要加上-lpthread选项。

最新文章

  1. protobuf编译出错的解决方案(iOS,OSX)
  2. 【代码笔记】iOS-看图听声音
  3. HtmlAgilityPack抓取搜房网数据简单示例
  4. Myeclipse 10.7 android(安卓) 开发环境搭建
  5. 【intellij】异常信息汇总
  6. linux是实时系统还是分时操作系统
  7. Elasticsarch及插件安装
  8. android XML格式颜色
  9. JVM内存
  10. Linux入门(17)——Ubuntu16.04显示内存CPU网速等(System Monitor)
  11. ●BZOJ 1272 [BeiJingWc2008]Gate Of Babylon
  12. weblogic弱密码检测
  13. problem: vue之数组元素中的数组类型值数据改变却无法在子组件视图更新问题
  14. (spfa) Highway Project (zoj 3946 )
  15. 转:ubuntu 18.04 LTS 安装 java10(JDK) 及问题说明
  16. Day5 JDBC
  17. java-数据库连接工具类 DataSourceUtil.java
  18. c++类型形参的实参的受限转换
  19. Codeception (安装)
  20. SSM 框架搭建 idea环境

热门文章

  1. C# Coding Conventions(译)
  2. 通过JDBC连接数据库(MySql为例)并读取数据库信息--JSP基础
  3. css图片的相关操作
  4. 下一代 Android
  5. (luogu P4012)深海机器人问题 [TPLY]
  6. sql性能优化之多表联查
  7. Java集合框架(二)
  8. 一些常见的shell命令和git命令
  9. 笔记:MyBatis 使用 Java API配置
  10. 前端的UI设计与交互之数据展示篇