C++ EnterCriticalSection簡單使用
EnterCriticalSection作用
用途主要是在多線程中,當(dāng)開啟多線程中,要控制函數(shù)的執(zhí)行順序時,就需要用到它了,就是假如多個線程同時訪問這個函數(shù)時,需要控制執(zhí)行的順序,可以使用它去控制順序。
定義一個全局的鎖 CRITICAL_SECTION的實例
和一個靜態(tài)全局變量
- CRITICAL_SECTION cs;//可以理解為鎖定一個資源
- static int n_AddValue = 0;//定義一個靜態(tài)的全部變量n_AddValue實戰(zhàn)
一、首先是它的使用步驟:
//1.創(chuàng)建全局互斥量 CRITICAL_SECTION g_cs; //2.初始化互斥量 InitializeCriticalSection(&g_cs);//必須添加,否則會報錯 //3.進入 EnterCriticalSection(&g_cs); //4.離開 LeaveCriticalSection(&g_cs);
二、示例代碼:
// DefDemo.cpp : 定義控制臺應(yīng)用程序的入口點。 // #include "stdafx.h" using namespace std; CRITICAL_SECTION g_cs; struct gParam { int m; int n; }; void WINAPI getMax(gParam * cur_Param) { EnterCriticalSection(&g_cs); if (cur_Param->m > cur_Param->n) { cout << "MAX_VALUE:"<< cur_Param->m << endl; } else { cout << "MAX_VALUE:"<< cur_Param->n << endl; } LeaveCriticalSection(&g_cs); return; } int _tmain(int argc, _TCHAR* argv[]) { InitializeCriticalSection(&g_cs); gParam * cur_Param = new gParam; cur_Param->m = 2; cur_Param->n = 5; gParam * cur_NexParam = new gParam; cur_NexParam->m = 10; cur_NexParam->n = 2; CreateThread(nullptr,0,(LPTHREAD_START_ROUTINE)getMax,cur_Param,0,0); CreateThread(nullptr,0,(LPTHREAD_START_ROUTINE)getMax,cur_NexParam,0,0); system("pause"); delete cur_Param; return 0; }
運行結(jié)果:
到此這篇關(guān)于C++ EnterCriticalSection簡單使用的文章就介紹到這了,更多相關(guān)C++ EnterCriticalSection內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
關(guān)于C語言函數(shù)strstr()的分析以及實現(xiàn)
以下是對C語言中strstr()函數(shù)的使用進行了詳細的分析介紹,需要的朋友可以參考下2013-07-07詳解C/C++實現(xiàn)各種字符轉(zhuǎn)換方法合集
這篇文章主要為大家詳細介紹了C/C++中實現(xiàn)各種字符轉(zhuǎn)換的方法,文中的示例代碼講解詳細,對我們學(xué)習(xí)C++具有一定借鑒價值,需要的可以參考一下2022-09-09Visual Studio Code運行C++代碼時顯示CLOCKS_PER_SEC未定義的問題及解決方法
這篇文章主要介紹了解決Visual Studio Code運行C++代碼時顯示CLOCKS_PER_SEC未定義的問題,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-04-04