怎么使用criticalsection,具体示范一下
时间: 2024-02-18 21:05:56 浏览: 62
criticalsection.rar_CriticalSection_critical
好的,下面是一个使用 "CriticalSection" 的示例代码:
```c++
#include <windows.h>
CRITICAL_SECTION cs; // 定义一个临界区
void testCriticalSection()
{
InitializeCriticalSection(&cs); // 初始化临界区
// 创建两个线程并发访问临界区
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(&cs); // 删除临界区
}
DWORD WINAPI threadFunc(LPVOID lpParam)
{
EnterCriticalSection(&cs); // 进入临界区
// 在这里执行一些需要保护的操作
LeaveCriticalSection(&cs); // 离开临界区
return 0;
}
```
在上面的代码中,我们首先定义了一个 "CriticalSection" 对象 "cs",然后在 "testCriticalSection" 函数中使用 "InitializeCriticalSection" 函数对其进行初始化。接着,我们创建了两个线程,并在这两个线程中并发访问了临界区。在每个线程中,我们使用 "EnterCriticalSection" 进入临界区,执行需要保护的操作,然后使用 "LeaveCriticalSection" 离开临界区。最后,我们使用 "DeleteCriticalSection" 函数删除了临界区。
需要注意的是,在使用 "CriticalSection" 时,一定要遵循 "先进入临界区的线程先离开临界区" 的原则,否则可能会导致死锁等问题。此外,临界区的大小应该尽量小,以免阻塞其他线程的执行。
阅读全文