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 艺少

windows下进程与线程的更多相关文章

  1. windows 下进程与线程的遍历

    原文:http://www.cnblogs.com/Apersia/p/6579376.html 在Windows下进程与线程的遍历有好几种方法. 进程与线程的遍历可以使用<TlHelp.h&g ...

  2. windows下进程与线程剖析

    进程与线程的解析 进程:一个正在运行的程序的实例,由两部分组成: 1.一个内核对象,操作系统用它来管理进程.内核对象也是系统保存进程统计信息的地方. 2.一个地址空间,其中包含所有可执行文件或DLL模 ...

  3. [笔记]linux下和windows下的 创建线程函数

    linux下和windows下的 创建线程函数 #ifdef __GNUC__ //Linux #include <pthread.h> #define CreateThreadEx(ti ...

  4. windows 下进程池的操作

    在Windows上创建进程是一件很容易的事,但是在管理上就不那么方便了,主要体现在下面几个方面: 1. 各个进程的地址空间是独立的,想要在进程间共享资源比较麻烦 2. 进程间可能相互依赖,在进程间需要 ...

  5. windows下进程间通信与线程间通信

    进程间通信: 1.文件映射(Memory-Mapped Files) 文件映射(Memory-Mapped Files)能使进程把文件内容当作进程地址区间一块内存那样来对待.因此,进程不必使用文件I/ ...

  6. [转] linux 下 进程和线程的区别

    1.进程与线程 进程是程序执行时的一个实例,即它是程序已经执行到课中程度的数据结构的汇集.从内核的观点看,进程的目的就是担当分配系统资源(CPU时间.内存等)的基本单位. 线程是进程的一个执行流,是C ...

  7. Linux下进程与线程的区别及查询方法

    在平时工作中,经常会听到应用程序的进程和线程的概念,那么它们两个之间究竟有什么关系或不同呢?一.深入理解进程和线程的区别 1)两者概念 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进 ...

  8. 【windows下进程searchfilterhost.exe分析】

    searchfilterhost.exe [进程信息] 进程文件: searchfilterhost.exe 进程名称: n/a 英文描述: searchfilterhost.exe is a pro ...

  9. linux 下 进程和线程的区别

    1.进程与线程 进程是程序执行时的一个实例,即它是程序已经执行到课中程度的数据结构的汇集.从内核的观点看,进程的目的就是担当分配系统资源(CPU时间.内存等)的基本单位. 线程是进程的一个执行流,是C ...

随机推荐

  1. mongodb 高级聚合查询

    mongodb高级聚合查询   在工作中会经常遇到一些mongodb的聚合操作,特此总结下.mongo存储的可以是复杂类型,比如数组.对象等mysql不善于处理的文档型结构,并且聚合的操作也比mysq ...

  2. BZOJ 4300: 绝世好题 二进制

    对于每一个数字拆位,然后维护一个大小为 30 左右的桶即可. code: #include <bits/stdc++.h> #define N 100006 #define setIO(s ...

  3. wepy框架滑动组件使用

    https://github.com/dlhandsome/wepy-com-swiper

  4. PHP全栈学习笔记32

    <?php $i = 0; do { echo $i; } while ($i > 0); ?> for (表达示1; 表达示2; 表达示3){ 需要执行的代码段 } <?ph ...

  5. mysql 修改表结构以支持事务操作

    修改表的类型为 INNODB 的 SQL: alter table category_ ENGINE = innodb;     查看表的类型的 SQL show table status from ...

  6. python eval的用法

    >>>x = >>> eval( '3 * x' ) >>> eval('pow(2,2)') >>> eval('2 + 2' ...

  7. hello world&Restart the Journey

      一个女OIer. 总结,游记,集训日志在博客园:题解大多在洛谷. 洛谷博客点这里. $\texttt{ You can go on,just take me with you.}$ 可以叫我Har ...

  8. FLUENT多相流问题后处理中如何显示其中一相的分布【转载】

    转载自:http://blog.sina.com.cn/s/blog_6a5314cf0100tnsz.html 多相流问题后处理中很容易显示相界面在某些面上的形态,如图1所示.其实利用ISO-Cli ...

  9. 将Excel文件导入到Navicat Premium中日期变为0000-00-00

    在网上查询了一些文章,说要改excel的单元格格式,我试验了好几次,不管是设置成文本,还是日期,都始终是 0000-00-00. 最后改变了办法,把数据库中的date类型设置 成 varchar,等导 ...

  10. Facebook开源时间序列内存数据库Beringei,追求极致压缩率——如果是int根据大多数时间序列中的值与相邻数据点相比并没有显著的变化,只要使用XOR将当前值与先前值进行比较,然后存储发生变化的比特。最终,该算法将整个数据集至少压缩了90%

    转自:http://www.infoq.com/cn/news/2017/02/Facebook-Beringei 2017年2月3日,Facebook宣布将开源他们的高性能时序数据存储引擎Berin ...