zoukankan      html  css  js  c++  java
  • Linux学习--线程概念

    线程

    我们知道 ,进程在各自独立的地址空间中运行,进程之间共享数据需要用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选项。  

  • 相关阅读:
    卷一第十、十一、十二、十三、十四、十五章为广域网技术,暂停学习,先学习好局域网
    卷一第九章:WLAN
    卷一第八章:以太网技术
    卷一第七章:局域网概述
    卷一第六章:网络设备基本调试
    卷一第五章:网络设备文件管理
    二层、三层交换机介绍及转发原理
    Codeforces Round #641 (Div. 1)
    机器学习
    机器学习
  • 原文地址:https://www.cnblogs.com/melons/p/5791802.html
Copyright © 2011-2022 走看看