我是一名C#程序员,现在开始写多线程的C++应用程序,想知道使用什么更好: std::thread
还是它的Boost对应物?
我看到了另一个Stack Overflow帖子中的讨论,但仍然不完全清楚为什么应该选择其中之一。如果不是要开始一个新程序,我应该使用标准库还是Boost线程?
谢谢!
我是一名C#程序员,现在开始写多线程的C++应用程序,想知道使用什么更好: std::thread
还是它的Boost对应物?
我看到了另一个Stack Overflow帖子中的讨论,但仍然不完全清楚为什么应该选择其中之一。如果不是要开始一个新程序,我应该使用标准库还是Boost线程?
谢谢!
如果您的项目尚未使用boost,那么没有理由使用boost::thread而不是std::thread。除非您在使用一些STL中没有的boost功能。std::thread对于大多数用例已经足够合适,除非有强有力的论据证明,编写标准代码总是更可取的。
但是,如果您的项目已经使用了boost,请检查boost::thread是否提供了与std::thread相比的任何额外功能。
shared_ptr<>
-- Boost使用了大量头文件,而Visual Studio 2008只需要少量头文件,我们切换到它后,对构建时间产生了明显积极的影响。 - the_mandrillshared_ptr
存在缺陷且实现非常糟糕!下面的代码(符合标准)会在那里崩溃:结构体a
{
a():p_(this,mem_fn(&a::delete_me))
{}
void reset()
{
p_.reset();
}
void delete_me()
{
delete this;
}shared_ptr<a> p_;
};int main()
{
a *p = new a;
p->reset();
} - Igor R.请记住,Boost.Thread是一个可移植的库,并且可以在广泛的平台/编译器上进行编译,包括那些不支持std::thread的平台。
这真的取决于您的习惯和偏好。使用 Boost,您可以拥有一整套使生活更轻松的库,但需要在编译程序的系统上安装它们,而使用 std 线程只需要一个 cpp 编译器。
std::thread
需要一个支持 C++11 的编译器。目前所有所谓的 C++11 编译器都是部分完成并且在不断改变,因此使用这种编译器并不一定易如反掌。 - Steve Jessop
boost::thread
与std::thread
非常不同。它们不能互换使用。boost::thread
是几年前设计的,因此显得有些陈旧。 - Pete Becker