entercriticalsection函数举个例子
时间: 2024-05-09 07:18:36 浏览: 94
假设在一个多线程程序中,有两个线程同时要修改同一个全局变量,那么就需要使用临界区来保证数据的正确性。在Windows操作系统中,可以使用entercriticalsection函数来创建临界区。
以下是一个简单的例子:
```
#include <Windows.h>
CRITICAL_SECTION g_cs; // 定义临界区
void ThreadProc()
{
EnterCriticalSection(&g_cs); // 进入临界区
// 修改全局变量
LeaveCriticalSection(&g_cs); // 离开临界区
}
int main()
{
InitializeCriticalSection(&g_cs); // 初始化临界区
// 创建多个线程
HANDLE hThread1 = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadProc, NULL, 0, NULL);
HANDLE hThread2 = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadProc, NULL, 0, NULL);
// 等待所有线程结束
WaitForSingleObject(hThread1, INFINITE);
WaitForSingleObject(hThread2, INFINITE);
DeleteCriticalSection(&g_cs); // 删除临界区
return 0;
}
```
在这个例子中,我们定义了一个全局的临界区变量g_cs,并在主函数中初始化它。在ThreadProc函数中,我们使用EnterCriticalSection函数进入临界区,修改全局变量,然后使用LeaveCriticalSection函数离开临界区。
在主函数中,我们创建了两个线程,它们同时执行ThreadProc函数。由于临界区只允许一个线程进入,所以保证了对全局变量的修改是安全的。
最后,我们删除了临界区变量。
阅读全文