windows下进程与线程

寵の児 提交于 2020-02-12 10:38:39

windows下进程与线程

Windows是一个单用户多任务的操作系统,同一时间可有多个进程在执行。进程是应用程序的运行实例,可以理解为应用程序的一次动态执行;而线程是CPU调度的单位,是进程的一个执行单元。一个进程可以有多个线程,而一个线程只能从属于一个进程。

进程包含文本、数据、堆栈片段一级进程自身的资源(比如进程创建的文件、管道、同步对象等)。由操作系统负责管理进程及其资源,与进程相关的信息被保存在一个被称作进程控制块的结构中。

线程是操作系统分配CPU时间的基本实体。在一个多线程的应用程序中,每一个线程都有自己的堆栈,并且可以独立地操作同一程序中的其他线程。
一般来讲,操作对象是线程。

进程与线程的最大区别就是进程有自己的地址空间,而线程没有,线程共享进程的地址空间。进程内的两个线程可以访问同一个数据片段,因此,通过使用该数据片段可以实现线程间的通信。

  • 线程间通信一:全局变量,线程监督。利用volatile关键词修饰,要求编译器不要将该变量缓存到一个寄存器当中,即允许别的线程对该变量进行修改。操作过程就是在开启线程的时候令监督变量为1,同时在线程中监督此变量,然后当要关闭该线程的时候,在主程序(线程)中将监督变量改为0,因此,在线程函数中检测到该变量变为0之后,就退出。

  • 线程间通信二:采用消息机制。因为windows程序设计中,应用程序的每一个线程都拥有自己的消息队列,这样,在线程之间就可以方便的通过消息来传递信息。操作过程是定义一个用户消息,#define WM_USERMSG WMUSER+100, 在适当的时候,在子线程中调用PostMessage函数,将消息发送至主线程,同时可以传递参数。最后在主线程中把消息映射到相应的处理函数中。

这里写图片描述

线程同步:主要有同步对象与等待函数。
根据上面的概念图只说明一个关于信号量的问题,这个问题在DSP的操作系统DSP/BIOS中也遇到过。信号量在创建的时候会设置初始值和最大值,每有一个线程占用共享资源时,信号量递减1,当信号量大于0时,说明信号量对象一直是有信号的,而当信号量减到0时,信号量对象变为无信号。就像图书馆资源一样,一共5本书,每人限取一本,每进来一人,递减一个,当5个人全在时,不允许人再进来。当信号量大于0,说明还有资源可用,可以放线程占用资源。实现资源空间的共享。
对于事件,已经用过。主要是通过创建事件,通过设定手动触发,单个对象等待函数来实现对线程的同步作用。


2015-9-20 艺少

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!