gpt4 book ai didi

c++ - 这段代码是一个有效的临界区包装类吗

转载 作者:可可西里 更新时间:2023-11-01 11:21:37 25 4
gpt4 key购买 nike

我实际上有 2 个问题,这是第一个。

使用我在两个不同站点找到的代码,我编写了这两个关键部分包装器类。

它会起作用吗?

#ifndef CRITICALSECTION_H
#define CRITICALSECTION_H
#include "windows.h"



class CriticalSection{
long m_nLockCount;
long m_nThreadId;
typedef CRITICAL_SECTION cs;
cs m_tCS;
public:
CriticalSection(){
::InitializeCriticalSection(&m_tCS);
m_nLockCount = 0;
m_nThreadId = 0;
}
~CriticalSection(){ ::DeleteCriticalSection(&m_tCS); }
void Enter(){ ::EnterCriticalSection(&m_tCS); }
void Leave(){ ::LeaveCriticalSection(&m_tCS); }
void Try();
};


class LockSection{
CriticalSection* m_pCS;
public:
LockSection(CriticalSection* pCS){
m_pCS = pCS;
if(m_pCS)m_pCS->Enter();
}
~LockSection(){
if(m_pCS)m_pCS->Leave();
}
}

/*

Safe class basic structure;

class SafeObj
{
CriticalSection m_cs;

public:
void SafeMethod()
{
LockSection myLock(&m_cs);
//add code to implement the method ...

}
};



*/
#endif

第二个问题。浏览时 here ,我注意到作者没有包括

::初始化、删除、输入、离开临界区。这些不是类(class)正常工作所必需的吗?还是我遗漏了什么?

最佳答案

LockSection 类使用 RAII调用 EnterLeave。创建对象时,将调用 Enter。当对象被销毁(通过超出范围)时,调用 Leave

InitializeDeleteCriticalSection 类的构造函数和析构函数调用。

学习 RAII,学好它。这是你的 friend 。

关于c++ - 这段代码是一个有效的临界区包装类吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7678574/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com