C++的EnterCriticalSection如何使用

c++
1294
2023/8/24 0:56:42
栏目: 编程语言
开发者测试专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

在C++中,EnterCriticalSection是一个Windows API函数,用于进入临界区(critical section)。

使用EnterCriticalSection函数,你需要先创建一个临界区对象(CRITICAL_SECTION),然后在需要保护的代码段前后调用EnterCriticalSection和LeaveCriticalSection函数。

下面是一个简单的示例代码:

#include <iostream>
#include <windows.h>
// 定义临界区
CRITICAL_SECTION g_criticalSection;
// 线程函数
DWORD WINAPI MyThread(LPVOID lpParam) {
// 进入临界区
EnterCriticalSection(&g_criticalSection);
// 在临界区中执行需要保护的代码
std::cout << "Thread " << GetCurrentThreadId() << " is running." << std::endl;
// 离开临界区
LeaveCriticalSection(&g_criticalSection);
return 0;
}
int main() {
// 初始化临界区
InitializeCriticalSection(&g_criticalSection);
// 创建线程
HANDLE hThread = CreateThread(NULL, 0, MyThread, NULL, 0, NULL);
// 等待线程结束
WaitForSingleObject(hThread, INFINITE);
// 销毁临界区
DeleteCriticalSection(&g_criticalSection);
return 0;
}

在这个示例中,我们首先定义了一个全局的临界区对象g_criticalSection。然后,在线程函数中,我们先调用EnterCriticalSection函数进入临界区,然后输出一条消息,最后调用LeaveCriticalSection函数离开临界区。

在主函数中,我们先调用InitializeCriticalSection函数初始化临界区,然后创建一个线程并等待线程结束。最后,我们调用DeleteCriticalSection函数销毁临界区。

请注意,在使用临界区时,需要保证在进入和离开临界区的代码段中不会出现异常或提前返回,否则可能会导致临界区无法释放,从而造成死锁。

辰迅云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

推荐阅读: c语言怎么求两个整数的最大公约数