小编use*_*610的帖子

Mutex的锁定/解锁功能应该是"const"吗?

我正在维护一个包含Mutex类的库.我无法确定此类公开的lock()和unlock()函数是否应该是const.我在Web上寻找类似的代码,并且可以找到这两种实现.

第一个实现,lock()和unlock()不是const.这意味着在const函数中使用Mutex类的人应该付出额外的努力来调用Mutex的函数:

class Mutex
{
public:
   void lock();
   void unlock();
};

class Foo
{
public:
   void getBar(Bar& bar) const
   {
      m_mutex.lock();
      bar = m_bar;
      m_mutex.unlock();
   }

private:
   // Mutable, responsability of the user (or we could use a const_cast when needed)
   mutable Mutex m_mutex;
   Bar   m_bar;
};
Run Code Online (Sandbox Code Playgroud)

第二个实现,lock()和unlock()是const,即使这听起来不太自然(因为我们修改了Mutex实例),但用户在他的一个const函数中调用这些函数时不必费心:

class Mutex
{
public:
   void lock() const;
   void unlock() const;
};

class Foo
{
public:
   void getBar(Bar& bar) const
   {
      m_mutex.lock();
      bar = m_bar;
      m_mutex.unlock();
   }

private:
   Mutex m_mutex;
   Bar   m_bar;
}; …
Run Code Online (Sandbox Code Playgroud)

c++ api multithreading

9
推荐指数
3
解决办法
2882
查看次数

标签 统计

api ×1

c++ ×1

multithreading ×1