一、windows临界区
Windows
临界区:(使用前必须初始化)
//创建:
CRITICAL_SECTION my_winsec;//创建windows中的临界区,类似与互斥量,使用前必须初始化
//初始化:(通常在类构造函数中初始化)
InitializeCriticalSection(&my_winsec);//初始化临界区
//临界区使用:
EnterCriticalSection(&my_winsec);//进入临界区(加锁)
myQueue.push_back(i);
LeaveCriticalSection(&my_winsec);//离开临界区(解锁)
二、windows临界区与C++ 11锁的异同:
-
包含#include <windows.h>
-
Windows临界区,在同一个线程中是可以重复进入的,但是进入的次数与离开的次数必须相等。
C++互斥量则不允许同一个线程重复加锁,否则报异常。 -
效果几乎可以等同于c++11的mutex,可以保护一个代码段。
关于Windows
临界区完整实例代码:
#include<mutex>
#include<Windows.h>
using namespace std;
#define __WINDOWSJQ_
class A
{
public:
void inMsg()
{
for (size_t i = 0; i < 100000; i++)
{
#ifdef __WINDOWSJQ_
EnterCriticalSection(&my_winsec);//进入临界区(加锁)
EnterCriticalSection(&my_winsec);//进入临界区(加锁)
myQueue.push_back(i);
LeaveCriticalSection(&my_winsec);//离开临界区(解锁)
LeaveCriticalSection(&my_winsec);//离开临界区(解锁)
#else</