轻量级可移植C ++线程

时间:2010-11-15 15:35:07

标签: c++ multithreading portability

有没有人知道轻量级可移植C ++线程库,它可以在Windows,Linux和Mac OS X上运行?

特别是在我的情况下,我做了一个模拟器,每次经过导出模拟数据。我想只运行一个线程(模拟),偶尔会启动另一个线程(导出)。唯一的条件是:如果导出线程开始等待它完成,然后再开始一个新的。

由于

6 个答案:

答案 0 :(得分:14)

TinyThread++怎么办?

  

需要C ++的可移植线程   应用程序吗? C ++ 0x不适用于您的   目标编译器?也是提升   大?

     

然后你需要TinyThread ++!

     

TinyThread ++实现了公平   兼容的C ++ 0x线程子集   管理班。

答案 1 :(得分:12)

我使用Boost.Thread并将其推荐给其他人。

几乎所有东西都可携带,易于使用。 “轻量级”的东西是唯一的问题,因为我不确定这意味着什么。 Boost是轻量级的,因为使用它几乎没有任何开销,因为所有的线程功能都是底层线程库(pthreads,Win32 API,Cell BE等)的松散静态包装。 “互斥体”实际上是实现“可锁定”概念的任何东西(参见documentation),它可以是任何东西 - 甚至是你自己特殊的东西。从这个意义上讲,它非常轻巧且可扩展。

然而,Boost是一个巨大的库,只需要提取你所需要的部分就会非常痛苦(这是一般关于Boost的常见抱怨)。在我的脑海中,使用Boost.Thread意味着你必须拥有Boost.DateTime,Boost.System,Boost.ConceptCheck和Boost.Compiler(可能更多,无论那些依赖等等)。值得称赞的是,如果你拥有整个库,由于它们的自动连接魔法,你可以很容易地构建你所需要的东西,但是需要考虑它,特别是如果Windows在目标列表中。 / p>

作为Boost的替代方案,我建议OpenMP,假设您的编译器支持它。它需要编译器支持某些更高级的功能这一事实可能会使它在“轻量级”的东西上取消它的资格,但它在使用时非常轻量级(第一次#pragma omp parallel for非常简洁)。它不像Boost那样功能丰富(我认为只有Qt可以在这里竞争),但是使用OpenMP可以为你提供一些非常酷的功能,这是其他线程库无法做到的。你必须使用一个有点现代的编译器,但GCC和MSVC在这里都有很好的支持。需要注意的是,它实际上是一个C库,如果您正在使用C ++,我认为这是一个缺点,但这对您的需求来说可能是一件好事。

如果你正在寻找一些明显更轻量级的东西(在两个方面都有意义),那么我会推荐OpenThreads。它远不如Boost那样具有可扩展性,并且发现性能较差(但不是很明显),它设计得非常好,值得一提。它将击中你所有指定的目标(Windows,OSX和Linux),所以如果它具有你想要的功能,那就去吧。

另外,Wikipedia

答案 2 :(得分:2)

Boot.Thread正是您要找的。在Boost的文档页面中引用它的描述

  

Portable C ++多线程。

答案 3 :(得分:2)

Boost.Thread可以在这里工作。

您可以使用join等待现有主题完成。

文档中还有其他代码示例,但启动线程如下所示:

struct callable
{
    void operator()();
};

boost::thread copies_are_safe()
{
    callable x;
    return boost::thread(x);
} // x is destroyed, but the newly-created thread has a copy, so this is OK

boost::thread oops()
{
    callable x;
    return boost::thread(boost::ref(x));
} // x is destroyed, but the newly-created thread still has a reference
  // this leads to undefined behaviour

答案 4 :(得分:0)

我大多听说Boost.Thread可能很重,Poco.Thread应该是轻量级的,英特尔的TBB我不知道它是如何工作的。

我对C ++ 0x进行了一些实验但是我被告知它对于复杂的实现还不够成熟。

答案 5 :(得分:0)

我使用c ++ 11 Standar来创建一个类多线程的线程,它适用于Linux,Windows和OS X,可能会为你使用:

https://github.com/jorgemedra/C-11-Threads/blob/master/README.md