【发布时间】:2019-10-08 02:59:22
【问题描述】:
我的代码如下:
class MyThread : public std::thread {
int a_;
public:
MyThread(int a)
: std::thread(&MyThread::run, this),
a_(a)
{ }
void run() {
// use a_
}
};
我想拥有自己的线程类,它拥有 std::thread 提供的所有方法,所以我让 MyThread 类继承 std::thread。 在 MyThread 的构造函数中,我将其成员函数传递给 std::thread。编译没问题,但我担心在 std::thread 的构造函数中调用 run() 和初始化 a_ 之间存在竞争条件。
有没有办法让它安全?
【问题讨论】:
-
which has all the methods that std::thread provides您具体指的是哪些方法?您无需继承即可访问公共成员函数。访问受保护的成员函数和变量可能是一种情况,但我不知道。 -
@TrickorTreat,join() 或 get_id() 等方法。我不想通过组合和适配 std::thread 对象在 MyThread 中再次添加这些接口,所以我直接将 std::thread 子类化。
标签: c++ multithreading