一:介紹
互斥物件是系統核心維護的一種資料結構,保證了物件對單個執行緒的訪問權。
二:函式說明
建立互斥物件:
HANDLE CreateMutex(
LPSECURITY_ATTRIBUTES lpMutexAttributes, 安全屬性結構指標,可為NULL,表示預設安全性
BOOL bInitialOwner, //是否佔有該互斥量,TRUE:佔有,FALSE:不佔有
LPCTSTR lpName //設定互斥物件的名字
);
獲得互斥物件:
DWORD WaitForSingleObject(
HANDLE hHandle, //互斥物件的控制程式碼
DWORD dwMilliseconds //0:測試物件的狀態立即返回;INFINITE:物件被觸發訊號後,函式才會返回
}
釋放互斥物件:
BOOL ReleaseMutex(HANDLE hHandle)
三:步驟
- 宣告互斥物件:HANDLE hMutex
- 建立互斥物件:hMutex = CreateMutex(NULL, FALSE, NULL)
- 使用互斥物件:WaitForSingleObject(hMutex, INFINITE)
- 釋放互斥物件:ReleaseMutex(hMutex)
四:程式碼實現
1 /******************************************************** 2 Copyright (C), 2016-2018, 3 FileName: t13 4 Author: woniu201 5 Email: wangpengfei.201@163.com 6 Created: 2018/10/23 7 Description: 執行緒同步-互斥物件 8 ********************************************************/ 9 #include <iostream> 10 #include <Windows.h> 11 12 using namespace std; 13 14 volatile int number = 1; 15 HANDLE hMutex; 16 17 DWORD CALLBACK ThreadFun1(LPVOID pParam) 18 { 19 while (1) 20 { 21 WaitForSingleObject(hMutex, INFINITE); 22 cout << "Thread1:" << number++ << endl; 23 ReleaseMutex(hMutex); 24 if (number >= 1000) 25 { 26 break; 27 } 28 29 } 30 return 0; 31 } 32 33 DWORD CALLBACK ThreadFun2(LPVOID pParam) 34 { 35 while (1) 36 { 37 WaitForSingleObject(hMutex, INFINITE); 38 cout << "Thread2:" << number++ << endl; 39 ReleaseMutex(hMutex); 40 if (number >= 1000) 41 { 42 break; 43 } 44 } 45 return 0; 46 } 47 48 49 int main() 50 { 51 hMutex = CreateMutex(NULL, FALSE, NULL); 52 53 CreateThread(NULL, 0, ThreadFun1, NULL, 0, NULL); 54 CreateThread(NULL, 0, ThreadFun2, NULL, 0, NULL); 55 56 getchar(); 57 return 1; 58 }
掃碼關注公眾號
專注分享Java,C/C++,STL,Spring框架,mybatis框架,mysql,redis,分散式,高併發,設計模式,爬蟲,docker,shell程式設計等相關技術,在這裡一起探討,一起學習,一起進步,不定期分享視訊書籍資源,充分利用碎片化時間,讓我們的技術之路更加有樂趣。