Nic*_*ton 3 c++ multithreading boost
我有以下代码(这是一些半sudo代码,可能无法编译):
class FooBar {
public:
void a();
void b();
boost::shared_ptr<boost::thread> m_thread;
std::string m_test;
};
void FooBar::a() {
m_test = "Foo bar"
m_thread = shared_ptr<thread>(new thread(bind(&FooBar::b, this)));
}
void FooBar::b() {
cout << m_test;
}
Run Code Online (Sandbox Code Playgroud)
代码cout << test不会产生任何输出,因为m_test它""代替"Foo bar".为什么是这样?我认为this作为第二个参数传递bind将允许我访问同一个实例b()- 我不正确吗?
是的,这很有效.这是"真实"版本,实际上打印"Foo bar":
#include <boost/make_shared.hpp>
#include <boost/thread.hpp>
#include <boost/bind.hpp>
using namespace boost;
struct FooBar {
void a();
void b();
shared_ptr<thread> m_thread;
std::string m_test;
};
void FooBar::a() {
m_test = "Foo bar";
m_thread = make_shared<thread>(bind(&FooBar::b, this));
}
void FooBar::b() {
std::cout << m_test;
}
int main() {
FooBar fb;
fb.a();
fb.m_thread->join();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
代码
cout << test不会产生任何输出,因为m_test是""
我怀疑这是因为在线程开始评估成员变量之前,对象被销毁了.请注意join(),这非常重要.