Windows编程 | 第八讲 多线程与线程同步

文章目录

    • 1.进程与线程
      • 什么是内核对象?
      • 程序与进程
      • 线程
      • 线程的运行
    • 2.简单多线程示例
      • 线程创建函数
      • 线程入口函数的声明形式
      • 一个简单的多线程程序
      • Sleep函数
      • 线程间的交替执行
    • 3.线程同步
      • 引言
      • 火车站售票系统模拟程序
      • 上述程序的隐患
      • 原因分析
      • 线程同步
      • 线程同步原理
      • 线程同步的方法
    • 4.利用互斥对象实现线程同步
      • 互斥对象
      • 获得互斥对象所有权
      • 释放互斥对象所有权
      • 实例
    • 5.利用临界区实现线程同步
      • 临界区对象
      • 相关API函数
      • 实例
      • 互斥对象与临界区的比较

1.进程与线程

什么是内核对象?

Windows编程 | 第八讲 多线程与线程同步_第1张图片

程序与进程

Windows编程 | 第八讲 多线程与线程同步_第2张图片
Windows编程 | 第八讲 多线程与线程同步_第3张图片

线程

Windows编程 | 第八讲 多线程与线程同步_第4张图片
Windows编程 | 第八讲 多线程与线程同步_第5张图片

线程的运行

Windows编程 | 第八讲 多线程与线程同步_第6张图片


2.简单多线程示例

线程创建函数

Windows编程 | 第八讲 多线程与线程同步_第7张图片

HANDLE CreateThread (  
SEC_ATTRS SecurityAttributes,  //通常设置为NULL,该线程使用默认的安全性
ULONG StackSize,// 通常设置为0,默认使用与调用函数的线程相同的栈空间大小
SEC_THREAD_START StartFunction, //新创建的线程的入口函数,该参数指定这个函数的入口函数 
PVOID ThreadParameter,  //通过这个参数给创建的新线程传递参数
ULONG CreationFlags, //它可以是两个值中的一个:CREATE_SUSPENDED和 0。前者表示线程在创建后处于暂停状态,直到程序调用ResumeThread函数为止;如果为0,则线程在创建之后立即运行。
PULONG ThreadId); //Windows 2000以上的操作系统,该参数可以设为NULL

线程入口函数的声明形式

Windows编程 | 第八讲 多线程与线程同步_第8张图片

一个简单的多线程程序

Windows编程 | 第八讲 多线程与线程同步_第9张图片
Windows编程 | 第八讲 多线程与线程同步_第10张图片
Windows编程 | 第八讲 多线程与线程同步_第11张图片

Sleep函数

Windows编程 | 第八讲 多线程与线程同步_第12张图片

线程间的交替执行

Windows编程 | 第八讲 多线程与线程同步_第13张图片


3.线程同步

引言

Windows编程 | 第八讲 多线程与线程同步_第14张图片

火车站售票系统模拟程序

Windows编程 | 第八讲 多线程与线程同步_第15张图片
Windows编程 | 第八讲 多线程与线程同步_第16张图片
Windows编程 | 第八讲 多线程与线程同步_第17张图片

上述程序的隐患

Windows编程 | 第八讲 多线程与线程同步_第18张图片

原因分析

Windows编程 | 第八讲 多线程与线程同步_第19张图片

线程同步

Windows编程 | 第八讲 多线程与线程同步_第20张图片

线程同步原理

Windows编程 | 第八讲 多线程与线程同步_第21张图片

线程同步的方法

Windows编程 | 第八讲 多线程与线程同步_第22张图片


4.利用互斥对象实现线程同步

互斥对象

Windows编程 | 第八讲 多线程与线程同步_第23张图片

获得互斥对象所有权

Windows编程 | 第八讲 多线程与线程同步_第24张图片

释放互斥对象所有权

Windows编程 | 第八讲 多线程与线程同步_第25张图片

实例

Windows编程 | 第八讲 多线程与线程同步_第26张图片
Windows编程 | 第八讲 多线程与线程同步_第27张图片
Windows编程 | 第八讲 多线程与线程同步_第28张图片


5.利用临界区实现线程同步

临界区对象

Windows编程 | 第八讲 多线程与线程同步_第29张图片

相关API函数

Windows编程 | 第八讲 多线程与线程同步_第30张图片

实例

Windows编程 | 第八讲 多线程与线程同步_第31张图片
Windows编程 | 第八讲 多线程与线程同步_第32张图片
Windows编程 | 第八讲 多线程与线程同步_第33张图片

互斥对象与临界区的比较

Windows编程 | 第八讲 多线程与线程同步_第34张图片

你可能感兴趣的:(#,Windows编程)