使用C ++线程池库(CTPL)的异常错误

时间:2015-06-11 10:53:32

标签: c++ multithreading exception visual-studio-2013 threadpool

我正在尝试使用C++ Thread Pool Library (CTPL),它恰好包含在一个header file中。

为此,我创建了一个非常简单的测试程序。这是代码:

#include <iostream>
#include "ctpl_stl.h"

void myFunction(int threadID_0)
{ 
    std::this_thread::sleep_for(std::chrono::milliseconds(100));
}

int main()
{
    ctpl::thread_pool p(2); // We create the pool with 2 threads

    p.push(myFunction);     // We add work
    p.push(myFunction);
    p.push(myFunction);
    p.push(myFunction);
    p.push(myFunction);
    p.push(myFunction);
    p.push(myFunction);
    p.push(myFunction);
    p.push(myFunction);

    p.stop(true);           // We wait for all the tasks to be performed

    return 0;
}

当我执行此程序时,有时它会起作用,有时不起作用(我得到一条消息&#34; R6010 - abort()已被调用&#34;)。

当我调试时,代码可用的最后一个函数调用是set_thread,错误位于第202行。

我注意到当我减少或删除计时器时,它更容易崩溃。

由于这段代码非常简单,我必须在原则上遗漏一些东西。 我做错了什么?

感谢您的帮助

1 个答案:

答案 0 :(得分:2)

文件ctpl_stl.h已在项目网站上修复。尝试使用新版本(0.0.2)而不是旧版本。它应该工作,它适用于我。

ctpl_stl.h是作为ctpl.h的修改而创建的,以方便那些不想依赖BOOST lockfree库的用户。 ctpl.h是一个更好的选择,它经过了很好的测试,应该更有效率。