多執行緒簡易售票程式--孫鑫視訊示例
孫鑫視訊多執行緒的第一個例子----簡易的售票程式
#include <Windows.h>
#include <iostream>
int ticket = 100;
//定義互斥物件
/*
互斥物件屬於核心物件,它能夠準確保證執行緒擁有對單個資源的互斥訪問
互斥物件包含一個使用數量 執行緒ID 計數器
ID用於標識系統中哪個執行緒當前擁有互斥物件,計數器用於指明該執行緒擁有互斥物件的次數
*/
HANDLE hMutex;
DWORD WINAPI FunProc_1(LPVOID lpParameter)
{
while(true)
{
//設定hMutex為未通知狀態
//請求互斥物件
WaitForSingleObject(hMutex , INFINITE);
if(ticket > 0)
{
Sleep(1);
std::cout << "hThread1 ticket sell :" << ticket-- << std::endl;
}else{
break;
}
//釋放互斥物件,將互斥物件設定為通知物件
ReleaseMutex(hMutex);
}
return 0;
}
DWORD WINAPI FunProc_2(LPVOID lpParameter)
{
while(true)
{
//設定hMutex為未通知狀態
//請求互斥物件
WaitForSingleObject(hMutex , INFINITE);
if(ticket > 0)
{
Sleep(1);
std::cout << "hThread2 ticket sell :" << ticket-- << std::endl;
}else{
break;
}
//釋放互斥物件,將互斥物件設定為通知物件
//當釋放的時候,系統會判斷當前執行緒ID和互斥物件hMutex內部的ID,相等才能釋放,不等則不能釋放
//誰擁有互斥物件,誰才能去釋放互斥物件,這樣才能成功釋放
//ReleaseMutex實際上遞減互斥物件的計數器
ReleaseMutex(hMutex);
}
return 0;
}
int main()
{
HANDLE hThread1 , hThread2;
//建立執行緒
hThread1 = CreateThread(NULL , 0 , FunProc_1 , NULL , 0 , NULL);
hThread2 = CreateThread(NULL , 0 , FunProc_2 , NULL , 0 , NULL);
//關閉控制程式碼並不是終止新建立執行緒,在主執行緒中關閉新建立執行緒的引用
//核心物件引用計數器減1,當核心物件的引用計數器為0時釋放核心物件
//類似於c++中的控制程式碼類中的引用計數
CloseHandle(hThread1);
CloseHandle(hThread2);
//建立/開啟互斥物件
//TRUE呼叫該互斥物件獲得所有權,反之是不獲得
//當為FALSE時也就是主執行緒不獲得hMutex的使用權
//當為TRUE時,主執行緒擁有了互斥物件,而主執行緒並沒有釋放,其他兩個執行緒便得不到互斥物件的所有權
hMutex = CreateMutex(NULL , FALSE , NULL);
Sleep(1000);
return 0;
}
相關文章
- Java 多執行緒售票示例Java執行緒
- 簡易多執行緒下載執行緒
- 執行緒的【生命週期】和【執行緒的同步】(多視窗售票例子)執行緒
- 多執行緒程式碼示例執行緒
- 簡易多執行緒爬蟲框架執行緒爬蟲框架
- 漫畫:多執行緒經典例子之一視窗售票執行緒
- python多執行緒示例Python執行緒
- Java:多執行緒模擬多站點售票過程薦Java執行緒
- Java多執行緒之Executor框架和手寫簡易的執行緒池Java執行緒框架
- 多執行緒Demo學習(執行緒的同步,簡單的執行緒通訊)執行緒
- Java多執行緒-執行緒通訊Java執行緒
- 多執行緒爬取B站視訊執行緒
- JAVA學習之路(多執行緒)—模擬售票(細解)Java執行緒
- python爬蟲之多執行緒、多程式+程式碼示例Python爬蟲執行緒
- 【Java】【多執行緒】執行緒池簡述Java執行緒
- C++簡易執行緒池C++執行緒
- 簡易執行緒池實現執行緒
- 多執行緒,多程式執行緒
- Java多執行緒學習——執行緒通訊Java執行緒
- ObjC 多執行緒簡析(一)-多執行緒簡述和執行緒鎖的基本應用OBJ執行緒
- Java多執行緒——synchronized的使用示例Java執行緒synchronized
- Linux中檢視程式的多執行緒Linux執行緒
- 多執行緒------執行緒與程式/執行緒排程/建立執行緒執行緒
- 執行緒以及多執行緒,多程式的選擇執行緒
- easyexcel多sheet多執行緒匯入示例,獲取所以執行緒執行結果後返回Excel執行緒
- java多執行緒5:執行緒間的通訊Java執行緒
- 多執行緒之間通訊及執行緒池執行緒
- 多執行緒-程式和執行緒的概述執行緒
- Java多執行緒學習(3)執行緒同步與執行緒通訊Java執行緒
- Python——程式、執行緒、協程、多程式、多執行緒(個人向)Python執行緒
- Java多執行緒—執行緒同步(單訊號量互斥)Java執行緒
- Java多執行緒1:程式與執行緒概述Java執行緒
- C/S(socket、執行緒 實現多個客戶端、伺服器端簡易通訊)執行緒客戶端伺服器
- Python 多執行緒多程式Python執行緒
- 程式通訊 執行緒通訊執行緒
- .NET多執行緒程式設計(1):多工和多執行緒 (轉)執行緒程式設計
- Swift多執行緒:使用Thread進行多執行緒間通訊,協調子執行緒任務Swift執行緒thread
- 多執行緒和多執行緒同步執行緒