第八章 线程控制及操作(一)

上一次的内容是进程控制,到了这一章则是比进程用处更广泛的线程了学好线程,可是有很大的作用
摘要由CSDN通过智能技术生成

上一次的内容是进程控制,到了这一章则是比进程用处更广泛的线程了

学好线程,可是有很大的作用呢!

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

一,线程的概念

在进行线程的学习时,首先来了解一下概念:

线程是进程中的一个实体,自己不拥有资源,(除了运行中的必不可少的资源,如堆栈段,寄存器)
一个线程可以创建/撤销其他的线程,同一个进程中的多个线程可以并发执行,由于线程之间的相互制约
有间断性{就绪,阻塞,运行}
每一个进程至少存在一个线程,如果只有一个线程,那么这个线程 = 进程 = 程序自身

再用用户看来,多个线程同时进行,实质上线程还也是类似于进程一样在进行调度运行,叫做并发

但是,要注意的一点是:在多核CPU的现世代,多个线程可以在不同的CPU上工作,即真正意义上的并行


为什么要有多线程,因为它比多进程有这些优点:

  1. 多进程是独立的地址空间(vfork除外)

    反观多线程是独立的地址空间,同一进程内的线程,共享此进程的内存空间

    所以,多线程更具有时间优势

  2. 系统调度方面

    在系统调度方面,因为线程共享内存空间,所以在线程调度切换上更具有优势,内部直接进行通信

    而进程之间的系统调度,则需要信号机制调度,必经过操作系统,时间上更麻烦

  3. 另外的一些优势

    使用线程,可以提高响应速度,可以提高多处理器效率,改善程序结构

在我自己的理解看来,

线程也没有多神秘,其实就是在进程中继续划分的更小的计算机工作单位,可以更好地提高效率,节省时间

上面提到了,同一进程内的线程线程共享进程的地址空间,但是,线程也有其私有数据(区别于之后的“私有数据”)

线程号,ThreadID

寄存器 [程序计数器,堆栈指针]

堆栈

信号掩码

优先级

线程的私有存储空间

Linux系统下,不同于进程,线程的实现方式基于POSIX多线程标准

所有线程的操作,都是基于POSIX基准的接口函数

所以,在进行编译时,要链接动态库 -lpthread

下面说一些线程其他事情吧:


  1. 为什么会有线程出现?

    上世纪60年代,出现了进程的概念,方便工程师进行程序的设计,

    但是,随着科学日益进步,工程量的增加,进程已经明显不能满足需求了

    主要问题体现在两点上:

    • 进程较大的时 + 空开销(时间,空间的开销都大)

    • SMP,对称多处理机的出现,是同时运行几个程序成为了可能,但是使用进程的开销会很大

    就这样,在需求不段增长的时候,80年代,线程就出生了.

  2. 线程有几种调度方式?

    线程进行调度分为三种:

    <1>. 操作系统内核线程 e.g.Win32线程

    <2>. 用户线程 e.g.POSIX Thread

    <3>. 内核与用户线程混合调度 e.g.Win7 线程

  3. 线程的属性

    最早在Linux环境下,并没有真正的实现线程,所使用的名为”轻量进程”,实则用进程来实现线程功能

    直至后来,才再真正意义上实现了线程

    线程 = 程序(代码) + 数据 + TCB(类似于PCB)

    而其动态特性,则由TCB进行描述:

    线程状态 + 线程不运行时资源问题 + 执行堆栈 + 线程局部变量主存区 + 访问同一进程主存与其他资源

    最后,用一句话来描述线程与进程的关系 : 进程是线程的容器,线程是进程执行程序真正实体

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

二,线程操作

1.创建线程

#incldue<pthread.h>

int pthread_creat(pthred_t *thread,pthread_attr_t *attr,
                  void *(*start_routine)(void *), void arg)

pthread_creat,线程创建函数

其作用是:创建线程号为thread,线程属性为attr,执行参数为arg的start_routine函数的线程

创建一个新的线程后,线程也去执行新的程序,类似于进程的exec系函数,但是在内存空间上分配有不同之处

新创建的线程去运行指针指向的函数,而原线程继续执行接下来的操作

再来看几个函数:

函数 说明
pthread_t pthread_self(void) 类似于getpid(),获取线程自身线程ID
int pthread_equal(pthread_t thread1,pthread_t thread2) 判断两个进程是否为同一进程
i
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值