【读者背景:零基础】

第1章 为什么要千头万绪

我们通过API函数调整进程的优先级别是基于用户态的,核心态的进程优先级对用户是透明的,用户也无权干涉。

进程包含:内存和资源。资源包括核心对象(file handles和线程)、USESR资源(对话框和字符串)、GDI资源(Device Context和brushes)。

属于不同进程的线程,互相不能共享内存。而同一进程的线程,可共享进程的所有内存。若需要进程间通信,则要共享两进程的内存。

有一个任务,用单线程做两遍,比单核cpu用两个线程各做一遍速度要快。其中有context switch的时间消耗。

竞争条件(race conditions):假设两个进程P1和P2共享了变量a.在某一执行时刻,P1更新a为1,在另一时刻,P2更新a为2.因此两个任务竞争地写变量a.在这个例子中,竞争的“失败者”(最后更新的进程)据诶的那个了变量a的最终值。

原子操作:所谓原子操作是指不会被线程调度机制打断的操作;这种操作一旦开始,就一直运行到结束,中间不会有任何context switch,目的是减少共享变量“可见性”的开销。

可见性:当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。(理解为同步)

第2章 为什么要千头万绪

多线程程序无法预期:多线程程序是无法预期其行为的(影响因素很多,例如,CPU的速度、线程的工作、CPU的忙碌程度等非常多的因素)。结果就是,如果程序完蛋了,很难重复其过程。

多线程程序的执行次序无法保证:线程的执行顺序无法保证。多个线程去完成相同的任务,并不确定最先开启的线程和最后开启的线程哪个先完成。

Task Switches可能在任何时刻任何地点发生。

线程对小的改变有高度的敏感:线程中增加一定的计算量,会使结果发生很大的变化。

-----------------------------------------------------------------------------------------------------------------------------------------------------------2016/2/23 16:27

《Win32多线程程序设计》-侯杰【最后更新日期:16/02/23相关推荐

  1. 深入浅出Win32多线程程序设计

    引言 从单进程单线程到多进程多线程是操作系统发展的一种必然趋势,当年的DOS系统属于单任务操作系统,最优秀的成员员也只能通过驻留内存的方式实现所谓的"多任务",而如今的Win32操 ...

  2. 《win32多线程程序设计》学习笔记

    写于2016年6月24日 " vim:fen:fdm=marker:fmr={{{,}}}:fdl=0:fdc=1:ts=2:sw=2:sts=2 "第一章 为什么千头万绪 {{{ ...

  3. 深入浅出Win32多线程程序设计之线程通信

    简介 线程之间通信的两个基本问题是互斥和同步. 线程同步是指线程之间所具有的一种制约关系,一个线程的执行依赖另一个线程的消息,当它没有得到另一个线程的消息时应等待,直到消息到达时才被唤醒. 线程互斥是 ...

  4. win32多线程程序设计笔记(第四章上)

    前面已经介绍了线程的创建.销毁过程,如何判断一个线程是否结束:但是撰写多线程程序的一个挑战性问题就是:如何让一个线程和另外一个线程合作. 在同一时间段会存在多个线程,当这些线程同时存取同一数据时,就会 ...

  5. 《Win32多线程程序设计》学习笔记 第17章 OLE ActiveX COM

    Apartment Model 在该模型中,一个对象和一个特定的线程有关联,只有在该线程的context之中才能够调用该对象. COM的"apartment"是一个对象产生,运作和 ...

  6. Win32多线程程序设计学习(第五章)

    目录 不要让线程成为脱缰野马 1,干净地终止一个线程 "TerminateThread() 是一个危险的函数,应该在最不得已的情况下才使用" 2,线程优先权(Thread Prio ...

  7. 《Win32多线程程序设计》(11)---ResumeThread()SuspendThread()

    初始化一个线程 HANDLE hThread; DWORD threadId; hThread = CreateThread(NULL, 0, ThreadFunc, 0, CREATE_SUSPEN ...

  8. Win32多线程编程(1) — 基础概念篇

    内核对象的基本概念 Windows系统是非开源的,它提供给我们的接口是用户模式的,即User-Mode API.当我们调用某个API时,需要从用户模式切换到内核模式的I/O System Servic ...

  9. Win32 多线程学习总结

    Win32多线程编程学习心得 http://blog.csdn.net/jonathan321/article/details/50782832 博客原文地址:http://jerkwisdom.gi ...

最新文章

  1. https HttpsURLConnection请求的单向认证
  2. 函数⑥作用域与命名空间
  3. AutoIt Windows的自动化脚本
  4. js文件位置--为甚有些js必须放在尾部
  5. 浅谈Stein算法求最大公约数(GCD)的原理及简单应用
  6. 号角响起!百度AI开发者实战营第二季教你用AI实现商业梦想
  7. 怎样选择mysql的版本升级_mysql版本升级
  8. [JOYOI1326] 剑人合一
  9. 用python偷懒Arcgis(地类编码转地类名称)
  10. 一个不错的Redis实战学习视频教程
  11. 解决win7卢布符号显示问题
  12. 农商银行计算机岗笔试题,广东农商银行金融科技岗笔试考什么?
  13. h5新语义化标签(重要)
  14. 程序猿爆笑选集(2)
  15. Autodask_3DMAX安装Failed Installation aborted, Result=1619解决办法
  16. iis服务器部署项目,IIS环境下部署项目的详细教程
  17. 计算机图形学中消隐的相关概念及算法
  18. 利用CSS计数函数counter()实现计数
  19. 工业产品类计算机绘图师,全国计算机绘图师考试试题汇总.pdf
  20. 山西计算机大赛崔奕,计算机系在华北五省(市、自治区)大学生机器人大赛山西赛区比赛获得佳绩...

热门文章

  1. 查看源代码php_是否可以查看PHP源代码?
  2. java:clone 深拷贝与浅拷贝,为什么要慎用浅拷贝
  3. 是正经的区块链技术还是剑走偏锋搏一回?
  4. C++实现带头结点单链表
  5. leetcode系列-116.填充每个节点的下一个右侧节点指针
  6. ESXI问题点记录及解决方案汇总
  7. JTAG协议及接口的简要了解
  8. 小米携手联芯 是为了下多大一盘棋?
  9. java中的uuid是啥,UUID在Java中的两种发作方式
  10. android 华为 定位权限,华为手机中微信的定位权限怎么设置开启