Windows編程 | 第八講 多線程與線程同步

1.進程與線程

什麼是內核對象?

在這裏插入圖片描述

程序與進程

在這裏插入圖片描述
在這裏插入圖片描述

線程

在這裏插入圖片描述
在這裏插入圖片描述

線程的運行

在這裏插入圖片描述


2.簡單多線程示例

線程創建函數

在這裏插入圖片描述

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

線程入口函數的聲明形式

在這裏插入圖片描述

一個簡單的多線程程序

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

Sleep函數

在這裏插入圖片描述

線程間的交替執行

在這裏插入圖片描述


3.線程同步

引言

在這裏插入圖片描述

火車站售票系統模擬程序

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

上述程序的隱患

在這裏插入圖片描述

原因分析

在這裏插入圖片描述

線程同步

在這裏插入圖片描述

線程同步原理

在這裏插入圖片描述

線程同步的方法

在這裏插入圖片描述


4.利用互斥對象實現線程同步

互斥對象

在這裏插入圖片描述

獲得互斥對象所有權

在這裏插入圖片描述

釋放互斥對象所有權

在這裏插入圖片描述

實例

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述


5.利用臨界區實現線程同步

臨界區對象

在這裏插入圖片描述

相關API函數

在這裏插入圖片描述

實例

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

互斥對象與臨界區的比較

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章