CAutoLock.h
#pragma once
#include<windows.h>
class CriticalData
{
public:
CriticalData();
~CriticalData();
void Lock();
void Unlock();
private:
CRITICAL_SECTION m_cs;
};
class CAutoLock
{
public:
CAutoLock(CriticalData cs);
~CAutoLock();
private:
CriticalData& m_cs;
};
CAutoLock.cpp
``
#include "AutoLock.h"
CAutoLock::CAutoLock(CriticalData cs)
:m_cs(cs)
{
m_cs.Lock();
}
CAutoLock::~CAutoLock()
{
m_cs.Unlock();
}
CriticalData::CriticalData()
{
InitializeCriticalSection(&m_cs);
}
void CriticalData::Lock()
{
EnterCriticalSection(&m_cs);
}
void CriticalData::Unlock()
{
LeaveCriticalSection(&m_cs);
}
CriticalData::~CriticalData()
{
DeleteCriticalSection(&m_cs);
}
``
test.cpp
``
#include<iostream>
#include<process.h>
#include "AutoLock.h"
int nRst = 0;
CriticalData cs;
void GetData(void *pParam)
{
int rst = 1;
for (int i = 0; i < 10; i++)
rst *= 2;
CAutoLock lock(cs);
nRst += rst;
std::cout << nRst << '\t';
}
int main()
{
for (int i = 0; i < 5; i++)
_beginthread(GetData, 0, nullptr);
system("pause");
return 0;
}

本文介绍了一个用于实现线程安全的C++类CAutoLock。通过使用Win32 API中的临界区来确保多线程环境中数据访问的同步。文章通过一个具体的示例程序演示了如何使用CAutoLock来保护共享资源免受并发访问导致的问题。
504

被折叠的 条评论
为什么被折叠?



