相关疑难解决方法(0)

在C++标识符中使用下划线有哪些规则?

在C++中通常用某种前缀命名成员变量来表示它们是成员变量而不是局部变量或参数.如果你来自MFC背景,你可能会使用m_foo.我myFoo偶尔也见过.

C#(或者可能只是.NET)似乎建议只使用下划线,如_foo.这是否允许C++标准?

c++ standards naming-conventions c++-faq

906
推荐指数
4
解决办法
24万
查看次数

我怎样才能返回一个范围锁?

比如说,考虑一组帐户余额.然后你有一个复杂的功能,需要检查几个不同帐户的余额,然后调整几个不同帐户的余额.对于集合的其他用户,操作需要是原子的.你有一个集合类,其主要工作是提供这种原子性.什么是'正确'的方式?

我有一个有一个boost :: mutex成员的类.问题是调用者可能需要在持有互斥锁的同时对类执行一系列调用.但是我不想让类外的代码在互斥体上自由统治.

我想做的是这样的事情(伪代码):

class MyClass
{
 private:
  boost::mutex mLock;
 public:
  boost::scoped_lock& ScopedLock(return ScopedLock(mLock));
}
Run Code Online (Sandbox Code Playgroud)

这样,来电者可以这样做:

MyClass f;
if(foo)
{
 boost::scoped_lock lock(f->GetScopedLock());
 f->LockedFunc1();
 f->LockedFunc2();
}
Run Code Online (Sandbox Code Playgroud)

这个想法是,LockedFunc1并且LockedFunc2将被锁定调用.析构函数lock将解锁f->mLock.

我有两个基本问题:

1)我该怎么做?

2)这是明智的吗?

注意:这与这个类似命名的问题完全不同:返回一个boost :: scoped_lock.

c++ concurrency boost boost-thread

13
推荐指数
1
解决办法
2483
查看次数