- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有这两种方法来以线程独占方式访问 CMyBuffer
对象:
标题:
class CSomeClass
{
//...
public:
CMyBuffer & LockBuffer();
void ReleaseBuffer();
private:
CMyBuffer m_buffer;
CCriticalSection m_bufferLock;
//...
}
实现:
CMyBuffer & CSomeClass::LockBuffer()
{
m_bufferLock.Lock();
return m_buffer;
}
void CSomeClass::ReleaseBuffer()
{
m_bufferLock.Unlock();
}
用法:
void someFunction(CSomeClass & sc)
{
CMyBuffer & buffer = sc.LockBuffer();
// access buffer
sc.ReleaseBuffer();
}
更新:Nick Meyer 和 Martin York 指出了这些额外的缺点:
我想用 CSingleLock
对象(或类似的东西)来实现它,它会在对象超出范围时解锁缓冲区。
那怎么可能呢?
最佳答案
一种方法是使用 RAII :
class CMyBuffer
{
public:
void Lock()
{
m_bufferLock.Lock();
}
void Unlock()
{
m_bufferLock.Unlock();
}
private:
CCriticalSection m_bufferLock;
};
class LockedBuffer
{
public:
LockedBuffer(CMyBuffer& myBuffer) : m_myBuffer(myBuffer)
{
m_myBuffer.Lock();
}
~LockedBuffer()
{
m_myBuffer.Unlock();
}
CMyBuffer& getBuffer()
{
return m_myBuffer;
}
private:
CMyBuffer& m_myBuffer;
};
class CSomeClass
{
//...
public:
LockedBuffer getBuffer();
private:
CMyBuffer m_buffer;
};
LockedBuffer CSomeClass::getBuffer()
{
return LockedBuffer(m_buffer);
}
void someFunction(CSomeClass & sc)
{
LockedBuffer lb = sc.getBuffer();
CMyBuffer& buffer = lb.getBuffer();
//Use the buffer, when lb object goes out of scope buffer lock is released
}
关于c++ - 如何使用 CSingleLock 提供对此缓冲区的访问权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1255430/
阅读 Doug 的“Javascript: the goods parts”中关于函数的第 4 章谈论“方法调用模式”和“函数调用模式”(第 28 页)。 When a function is sto
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
在 Inkscape 中创建的文件的 svg 路径如下 -- d="m 1.2499932,903.60456 0,146.50004 197.7500068,0 0,-146.50004 -197.
有没有办法只为类对象制作 setter/getter?我的意思是,无论如何要在类里面为 this 设置 get/set 吗?例如: class something { constructor(
int main(int argc,char **argv){ for (argc--, argv++; argc > 0; argc -= argCount, argv += argCount) {
正如 Scott Meyers 和 Andrei Alexandrescu 在 this 中概述的那样文章 简单尝试实现双重检查锁定实现在 C++ 中特别是不安全的,并且通常在不使用内存屏障的多处理器
我正在尝试使用ionic 3 发布一个android 应用程序,但是运行时出现错误 apksigner verify myapp.apk 这些错误显示: WARNING: META-INF/andro
Java网站教程中的这个例子page .两个接口(interface)定义了相同的默认方法 startEngine()。类 FlyingCar 实现了这两个接口(interface),并且由于明显的冲
我在我的桌面应用程序中做了一些非常简单的错误记录,该应用程序通过 SerialPort 与设备通信。我做的一件事是设置一个全局异常捕获器,它除了使用以下方法记录堆栈跟踪外什么都不做: AppDomai
根据 SQL 规范,对此 sql 查询的这些响应中哪些更正确? 这是mysql更高版本的响应 C:\wamp\bin\mysql\mysql5.7.11\bin>mysql.exe --version
我正在尝试解决 GEEK COUNT spoj 的问题。我解决这个问题的方法是先找到所有奇数位的数字,然后从给定的数字中减去它。为了查找所有奇数位的数字计数,我使用了简单的排列。它为我提供了所有可能的
我有这个基本的文本检查代码,在 iOS 7 之前一直运行良好: NSMutableCharacterSet*testchars=[NSCharacterSet alphanumericChara
我对下面的代码感到困惑: class MyException extends Exception {} class AnotherException extends MyException {} cl
我在这段代码中遇到编译错误 #include #include #include using namespace std; void main(int argc
我在我的应用程序中使用导航组件,最近它工作正常但是在将项目更新到 AndroidX 之后我收到错误消息 navigation destination DESTINATION_NAME is unkno
{ "status":"success", "contents":[ { "id":"100", "event":"",
我是一名优秀的程序员,十分优秀!