隔离类的并发/不可并发访问的数据成员

时间:2015-10-06 12:10:23

标签: c++ multithreading concurrency

我有一个类,我们称之为MainThread,它将通过非阻塞主线程调用。现在这个类必须执行它委托给辅助类的一些任务,让我们调用它AsycnThread。现在AsyncThread实际上什么也没做,只是调用类MainThread的一些函数。这意味着可以同时访问MainThread的某些成员。因为我想避免任何锁定,所以我设计了类MainThread,使得它的一些成员可以同时访问而没有任何问题,而有些则特别禁止。这里还有一个详细信息,类MainThread有一个特定的函数performTask,从AsyncThread调用。

鉴于背景,我的目标是使此代码尽可能可维护。现在,为了区分MainThread的数据成员,我使它们变得可变,并使函数performTask const。现在这样做的是,如果我尝试访问performTask中并发使用不安全的任何数据成员,编译器将报告错误。下面是该类的骨架结构。

class MainThread {
public:
// Will be called asynchronously
void performTask() const;

private:
// Non concurrent data members
std::vector<int> data_store;
// Concurrently accessed data member
mutable CachedVec cache;
}

这看起来像是一种好方法吗?有没有其他方法可以实现类似的目标?

1 个答案:

答案 0 :(得分:-1)

1)易变成员函数 2)用于互斥锁获取/释放功能的LockingPtr模板

查找更多细节@ http://www.drdobbs.com/cpp/volatile-the-multithreaded-programmers-b/184403766