互斥
相關問題
多線程下代碼或資源的共享使用。
互斥的使用
1.創建互斥
HANDLE CreateMutex(
LPSECURITY_ATTRIBUTES lpMutexAttributes,//安全屬性(廢棄參數,置NULL)
BOOL bInitialOwner,//初始的擁有者TRUE/FALSE
LPCTSTR lpName //命名
);//創建成功返回互斥句柄
可等候的句柄,具備有信號和無信號的特點
bInitialOwner
TRUE-那個線程創建就那個線程具有互斥
FALSE-任何線程都不擁有它
特性:
a.獨占性-在某個時間點上,只有一個線程擁有互斥,別的線程等待,除非這個線程扔掉后,別的線程才會擁有互斥
b.所有線程都沒有互斥時,線程句柄有信號,如果有一個線程擁有互斥,線程句柄無信號
2.等候互斥
WaitFor… 互斥的等候遵循誰先等候誰先獲取。
誰先等候,誰先獲得互斥
3.釋放互斥
BOOL Releasemutex(
HANDLE hMutex //互斥句柄
);
4.關閉互斥句柄
CloseHandle
錯誤示例代碼(混亂)
#include <Windows.h> #include <stdio.h>DWORD CALLBACK myThreadProc1(LPVOID lpParam) {char* szText = (char*)lpParam;while(1){//printf("%s\n",szText);for(int i = 0; i < strlen(szText);i++){printf("%c",szText[i]);Sleep(150);}printf("\n");} } DWORD CALLBACK myThreadProc2(LPVOID lpParam) {char* szText = (char*)lpParam;while(1){//printf("%s\n",szText);for(int i = 0; i < strlen(szText);i++){printf("%c",szText[i]);Sleep(150);}printf("\n");} } int main() {char* szText1 = "***Thread1***";char* szText2 = "---Thread2---";DWORD myThreadId1 = 0;DWORD myThreadId2 = 0;HANDLE hThread1 = CreateThread(NULL,0,myThreadProc1,szText1,0,&myThreadId1);HANDLE hThread2 = CreateThread(NULL,0,myThreadProc2,szText2,0,&myThreadId2);system("pause");return 0; } //正確的代碼,加互斥鎖 #include <Windows.h> #include <stdio.h> HANDLE g_hHandle; DWORD CALLBACK myThreadProc1(LPVOID lpParam) {char* szText = (char*)lpParam;while(1){WaitForSingleObject(g_hHandle,INFINITE);//printf("%s\n",szText);for(int i = 0; i < strlen(szText);i++){printf("%c",szText[i]);Sleep(150);}printf("\n");ReleaseMutex(g_hHandle);} } DWORD CALLBACK myThreadProc2(LPVOID lpParam) {char* szText = (char*)lpParam;while(1){WaitForSingleObject(g_hHandle,INFINITE);//printf("%s\n",szText);for(int i = 0; i < strlen(szText);i++){printf("%c",szText[i]);Sleep(150);}printf("\n");ReleaseMutex(g_hHandle);} } int main() {g_hHandle =CreateMutex(NULL,FALSE,NULL);char* szText1 = "***Thread1***";char* szText2 = "---Thread2---";DWORD myThreadId1 = 0;DWORD myThreadId2 = 0;HANDLE hThread1 = CreateThread(NULL,0,myThreadProc1,szText1,0,&myThreadId1);HANDLE hThread2 = CreateThread(NULL,0,myThreadProc2,szText2,0,&myThreadId2);system("pause");CloseHandle(g_hHandle);return 0; }
原子鎖能解決的問題,互斥鎖也能解決;
互斥鎖能解決的問題,原子鎖不能解決;
原子鎖的效率要高很多,互斥鎖比較慢。
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
網絡推廣與網站優化公司(網絡優化與推廣專家)作為數字營銷領域的核心服務提供方,其價值在于通過技術手段與策略規劃幫助企業提升線上曝光度、用戶轉化率及品牌影響力。這...
在當今數字化時代,公司網站已成為企業展示形象、傳遞信息和開展業務的重要平臺。然而,對于許多公司來說,網站建設的價格是一個關鍵考量因素。本文將圍繞“公司網站建設價...
在當今的數字化時代,企業網站已成為企業展示形象、吸引客戶和開展業務的重要平臺。然而,對于許多中小企業來說,高昂的網站建設費用可能會成為其發展的瓶頸。幸運的是,隨...
鞍山大超市排名?第一名是大潤發超市。目前鞍山共有四家門店,分別是鐵西九道街民生店、鐵東區中華店、湖南小學湖南街店、立山店。店內環境干凈整潔,商品質量也有保證。第二家應該是嘉泰樂店。目前知道的有站前天河佳泰樂店,鐵西廣場附近的佳泰樂店,湖南省的佳泰樂店,都屬于鞍山本地人開的大店。再次,我覺得是個不錯的超市,也有一定的規模。目前已在鐵西永樂公園、九道街開設多家連鎖店。還有新隆嘉、聚果源、明利源等一些中...
volume指標怎么看?你好。股票市場的成交量指數就是換手率指數。換手率是指個股或市場的總換手率,用縱列表示。左側的坐標值對應于列的水平位置,該列是當時事務的總經理。如果當日收盤價高于或等于前一日收盤價,則成交一欄為紅色;否則,成交一欄為綠色。Ma5、ma10等是指5天和10天的平均交易量。酒店房間廁所內的VOLUME怎么使用,有什么用?您想知道如何使用酒店客房衛生間的音量控制軟件嗎?建議您直接打...
寫表單的時候有個value屬性,是表示什么呢?Value是表單控件傳遞給處理程序的值。例如,這是一個文本框。其值為“請在此處填寫用戶名”,即文本框。原文是“請在這里填寫用戶名”男女這是兩個單選按鈕。如果在表單提交后選擇“男”,則提交的值就是值,即表單提交后選擇“男”,反之亦然...