温馨提示×

C++ EnterCriticalSection简单使用

c++
小云
109
2023-08-09 15:24:43
栏目: 编程语言

EnterCriticalSection函数是用来进入临界区的函数,用于保护共享资源的访问。下面是一个简单的使用示例:

#include <iostream>
#include <Windows.h>
CRITICAL_SECTION g_criticalSection;
DWORD WINAPI ThreadFunc(LPVOID lpParam)
{
// 进入临界区
EnterCriticalSection(&g_criticalSection);
// 访问共享资源
std::cout << "Thread " << GetCurrentThreadId() << " entered critical section" << std::endl;
// 离开临界区
LeaveCriticalSection(&g_criticalSection);
return 0;
}
int main()
{
// 初始化临界区
InitializeCriticalSection(&g_criticalSection);
// 创建线程
HANDLE hThread1 = CreateThread(NULL, 0, ThreadFunc, NULL, 0, NULL);
HANDLE hThread2 = CreateThread(NULL, 0, ThreadFunc, NULL, 0, NULL);
// 等待线程结束
WaitForSingleObject(hThread1, INFINITE);
WaitForSingleObject(hThread2, INFINITE);
// 销毁临界区
DeleteCriticalSection(&g_criticalSection);
return 0;
}

上面的示例中,首先定义了一个全局的临界区变量 g_criticalSection,然后在 ThreadFunc 中使用 EnterCriticalSection 进入临界区,访问共享资源,最后使用 LeaveCriticalSection 离开临界区。在 main 函数中,先使用 InitializeCriticalSection 初始化临界区,然后创建两个线程来执行 ThreadFunc,最后使用 DeleteCriticalSection 销毁临界区。这样就可以保证两个线程同时只有一个线程可以进入临界区,避免了共享资源的竞争问题。

0