zoukankan      html  css  js  c++  java
  • 第9章 线程编程(1)_线程概念和线程标识

    1. 引言

    1.1 线程的概念

    (1)进程是资源管理的最小单位,线程是程序执行的最小单位

    (2)每个进程有自己的数据段、代码段和堆栈段。线程通常叫做轻型的进程,它包含独立的栈和CPU寄存器状态,线程是进程的一条执行路径,每个线程共享其所附属进程的所有资源,包括打开的文件、内存页面、信号标识及动态分配的内存等。

    (3)因为线程和进程比起来很小,所以相对来说,线程花费更少的CPU资源

    (4)在操作系统设计上,从进程演化出线程最主要的目的就是更好的支持多处理器并且减少进程上下文切换的开销

    1.2 线程和进程的关系

    (1)线程是属于进程的,线程运行在进程空间内,同一进程共享同一用户内存空间

    (2)当进程退出时,该进程所产生的线程都会被强制退出并清除。

    (3)一个进程至少需要一个线程作为它的指令执行体,进程管理着资源(如CPU、内存、文件等)。而将线程分配到某个CPU上执行。

    1.3 线程的分类

    (1)线程按其调度者可分为用户级线程内核级线程两种。

      ①用户级线程:主要解决的是上下文切换的问题,其调度过程由用户决定。

      ②内核级线程:由内核调度机制实现。

    (2)现在大多数操作系统都采用用户级线程和内核级线程并存的方法。

    (3)用户级线程要绑定内核级线程运行,一个进程中的内核级线程会分配到固定的时间片,用户级线程分配的时间片以内核线程为准。

    (3)默认情况下用户级线程和内核级线程是一对一,也可以多对一,这样实时性就会比较差。

    (4)当CPU分配给线程的时间片用完但线程没有执行完毕,此时线程会从运行状态返回到就绪状态,将CPU让给其它线程使用。

    1.4 Linux线程的实现

    (1)以下线程均为用户级线程。在Linux中,一般采用pthread线程库实现线程的访问与控制,由POSIX提供,具有良好的可移植性

    (2)Linux线程程序编译需要在gcc上链接库pthread,如gcc -o test.o test.c -lpthread

    1.5 线程的标识

    (1)每个进程内部的不同线程都有自己唯一标识(ID)

    (2)线程标识只在它所属的进程环境中有效。

    (3)线程标识是pthread_t数据类型

    头文件

    #include <pthread.h>

    函数

    int pthread_equal(pthread_t, pthread_t); //相等返回非0,否则返回0.

    pthread_t pthread_self(void); //返回调用线程的线程ID。

  • 相关阅读:
    插入排序
    dojo树的节点添加链接的例子
    Discuz 3x 配置问题
    mysql_connect() 不支持 请检查 mysql 模块是否正确加载
    IIS访问php页面问题,报告404错误
    Map使用操作系统内存的情况
    IT级别
    java类型和mysql类型的转换
    C++析构函数的自动调用问题
    c++中虚函数
  • 原文地址:https://www.cnblogs.com/5iedu/p/6413173.html
Copyright © 2011-2022 走看看