自从学了操作系统知识后,我就对多线程比较感兴趣,总想让自己写一些有关多线程的程序代码,但一直以来,发现自己都没怎么好好的去全面学习这方面的知识,仅仅是完成了操作系统课程上的小程序,对多线程的理解也不是很透彻。现在保研了,发现自己的时间也比较充裕了,因此想自己去系统的学习一下多线程的编程,说做就马上做(当时还躺在床上),我立马去图书馆,检索有关多线程的书籍,最终决定选择《Windows环境下多线程编程原理与应用》这本书,虽然有点旧,但对我这个菜鸟来说,还是有很多的东西需要学习的。因此就拿着本书开始自学多线程编程。写这篇随笔,也是为了今后记录自己的学习经历,也希望自己能够坚持下去。

上面的只是一个小插曲,现在开始记录自己今天的学到的知识。 编程之前肯定得先要了解一些基本的概念,比如进程和线程,那什么是进程和线程呢?

<一>进程和线程的自我理解

  1. 进程:正在运行的程序,拥有内存,CPU时间等一系列资源,在不同的时刻还可以处于不同的状态。
  2. 线程:Windows系统中最小执行单元,我的理解就是线程“寄生”在进程中,一个进程可以有多个线程,各个线程共享进程中的公共资源。

<二>单线程和多线程比较

  1. 单线程:一个进程只拥有一个线程,在计算机中的执行顺序就是按部就班,依次执行。
  2. 多线程:单CPU中,多线程中的“多”,只是给人的一种假像,每一个线程也是按照时间片来执行的,只是执行的速度太快,以至于给人的感觉好像“多”个线程一起在执行,所以站在不同的角度看待事物,给人的感觉也是不一样的(题外话)。

<三>同步对象

  1. 临界区对象(Critical Section Object):临界区对象,通过提供所有线程必须共享的对象来控制线程。只有拥有临界区对象的线程才可以访问受保护的资源(在临界区中被操作),其他线程必须得到该临界区对象才可以继续执行下去,否则将计入挂起状态(一种线程状态)。获得临界区对象的线程在离开临界区时候需要释放该临界区对象,以便其他线程得到访问权限。
  2. 互斥对象(Mutex Object):互斥对象和临界区对象的功能很相似,它们的区别是,互斥对象不仅仅保护一个进程中的资源共享,还可以保护进程间(多个进程之间)资源共享。
  3. 事件对象(Event Object):事件对象用来给线程传递信号,指示线程中某个特定的操作可以开始或者结束。同理,想要执行这个特定操作却没有获得事件对象的线程将处于挂起状态。
  4. 信号对象(Semaphore Object):信号对象与互斥对象类似,区别在于互斥对象每次只允一个许线程访问数据,信号对象却允许每次多个线程访问数据。

<四>Windows线程调度算法简介

  1. 总的算法是基于优先级可抢占算法;
  2. Windows系统将线程的优先级划分为32个等级,0为最低等级,31为最高等级;
  3. 同一优先级按照FIFS(First In First Service)----先来先服务;
  4. 为了避免”饿死“,系统动态的改变线程的优先级(降级);
  5. 当某一个线程正在执行时,高优先级可以抢占其时间片;
  6. 系统可以动态提高或者降低某些线程的优先级;

Windows环境下多线程编程原理与应用读书笔记(1)————基本概念的更多相关文章

  1. Windows环境下多线程编程原理与应用读书笔记(3)————Windows环境中的多线程实现(3)

    纤程 纤程(fiber): 相当于用户级别的线程或轻进程.纤程由Win32库函数支持,对核心是不可见的.纤程可以通过SwitchToFiber显示至另一合作纤程,以实现合作纤程之间的协同.线程是在Wi ...

  2. Windows环境下多线程编程原理与应用读书笔记(8)————信号量及其应用

    <一>线程间同步原因 线程间竞争共享资源: 线程间为完成某个任务而协作: 通过互斥量可以实现线程间由于竞争所需要的同步,通过事件可以实现线程间由于协作所需要的同步. 信号量很好地将互斥量和 ...

  3. Windows环境下多线程编程原理与应用读书笔记(7)————事件及其应用

    <一>事件 事件主要用于线程间传递消息,通过事件来控制一个线程是处于执行状态还是处于挂起状态. 事件和互斥量之间的差别: 事件主要用于协调两个或者多个线程之间的动作,使其协调一致,符合逻辑 ...

  4. Windows环境下多线程编程原理与应用读书笔记(6)————临界段及其应用

    <一>临界段 临界段对象通过提供所有线程必须共享的对象来控制线程.只有拥有临界段对象的线程才能够访问保护的资源.在另一个线程可以访问该资源之前,前一线程必须释放临界段对象,一遍新的线程可以 ...

  5. Windows环境下多线程编程原理与应用读书笔记(5)————互斥及其应用

    <一>互斥的同步机制 思想:当一个线程获得互斥量了后,其他所有要获取同一个互斥量的线程都处于阻塞状态,直到第一个线程释放互斥量为止. 设想几个线程竞争同一个互斥量,其中一个线程获得了互斥量 ...

  6. Windows环境下多线程编程原理与应用读书笔记(2)————面向对象技术

    面向对象技术是学C++需要重点掌握的知识,因为我觉得自己的基础还是比较可以,这一章节的内容就只是粗略的读了一遍,在此就不做过多的笔记.

  7. Windows环境下多线程编程原理与应用读书笔记(4)————线程间通信概述

    <一>线程间通信方法 全局变量方式:进程中的线程共享全局变量,可以通过全局变量进行线程间通信. 参数传递法:主线程创建子线程并让子线程为其服务,因此主线程和其他线程可以通过参数传递进行通信 ...

  8. Java多线程编程实战指南 设计模式 读书笔记

    线程设计模式在按其有助于解决的多线程编程相关的问题可粗略分类如下. 不使用锁的情况下保证线程安全: Immutable Object(不可变对象)模式.Thread Specific Storage( ...

  9. 关于docker在windows环境下运行的第一次体验

    关于docker在windows环境下执行的原理 1.1.           首先是Docker Quickstart启动,如果在虚拟机Oracle VM VirtualBox不存在default虚 ...

随机推荐

  1. 由一次自建库迁移到阿里云RDS引发的性能问题。

    刚入职一互联网公司,项目正好处于计划上线的时间,由于公司前不久已经购买了rds服务,领导决定尝试一番! 当然,新事物.云事物还是要谨慎的.安排我先把测试环境数据库迁移上去,这里吐槽一下,往rds迁移一 ...

  2. String类的构造方法(2)

    写了常见的几个而已. 1:new 一个String类的时候系统会自动传一个空构造 public String(); 注意: 当对象初始化是 null时 和 对象是 "" 时,两者是 ...

  3. mac 安装Beautiful Soup

    Beautiful Soup是一个Python的一个库,主要为一些短周期项目比如屏幕抓取而设计.有三个特性使得它非常强大: 1.Beautiful Soup提供了一些简单的方法和Python术语,用于 ...

  4. bzoj1027 [HNOI2004]打鼹鼠

    [HNOI2004]打鼹鼠 2014年5月2日2,8605 Description 鼹鼠是一种很喜欢挖洞的动物,但每过一定的时间,它还是喜欢把头探出到地面上来透透气的.根据这个特点阿Q编写了一个打鼹鼠 ...

  5. hdu3507 Print Article(斜率DP优化)

    Zero has an old printer that doesn't work well sometimes. As it is antique, he still like to use it ...

  6. html基础知识笔记

    HTML基础 1.1HTML文件的基本结构和W3C标准 1.1.1HTML简介 HTML是一种描述网页的语言,一种超文本标记的语言! 1.1.2HTML文件的基本结构 头部(head) 头部是网页的标 ...

  7. 【框架学习与探究之宿主服务--Topshelf】

    前言 此文欢迎转载,原始链接地址:http://www.cnblogs.com/DjlNet/p/7603819.html 正文 原先也偶然见过这个关键词,当时只是有个大致了解貌似和WinServic ...

  8. 关于xamarin.forms 中 list 的loadmore

    前言 最近几天在研究上拉加载啊,下拉刷新啊什么的.然而坑爹的事情总是那么多.在xamarin.forms中,list自带的,并没有上拉加载的这个属性(难道当初他们封装方法时,就不会想到数据多了会咋整吗 ...

  9. ZOJ1171

    错误代码先放这 #include<cstdio> #include<cstdlib> #include<iostream> #include<cstring& ...

  10. Iframe父子窗口之间的跨域事件调用和传值

    实现方案1:location.hash传值 父页面:parent.html(所在域:www.parent.com) 子页面:child.html(所在域:www.child.com) 要实现父子页面双 ...