使用 C++ 线程池库 (CTPL) 的异常错误
Exception error using C++ Thread Pool Library (CTPL)
我正在尝试使用 C++ Thread Pool Library (CTPL), which pleasantly consists in a single 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;
}
当我执行这个程序时,有时可以,有时不能(我收到消息 "R6010 - abort() has been called")。
当我调试时,代码可用的最后一个函数调用是 set_thread,错误在第 202 行。
我注意到当我减少或删除计时器时,它更容易崩溃。
由于这段代码很简单,我一定是漏掉了原理。
我做错了什么?
感谢您的帮助
文件ctpl_stl.h 已在项目网站上修复。尝试使用新版本 (0.0.2) 而不是旧版本。它应该有用,对我有用。
ctpl_stl.h 是作为 ctpl.h 的修改版创建的,目的是为了方便那些不想依赖 BOOST 无锁库的用户。
ctpl.h 是一个更好的选择,它经过了很好的测试,应该更有效率。
我正在尝试使用 C++ Thread Pool Library (CTPL), which pleasantly consists in a single 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;
}
当我执行这个程序时,有时可以,有时不能(我收到消息 "R6010 - abort() has been called")。
当我调试时,代码可用的最后一个函数调用是 set_thread,错误在第 202 行。
我注意到当我减少或删除计时器时,它更容易崩溃。
由于这段代码很简单,我一定是漏掉了原理。 我做错了什么?
感谢您的帮助
文件ctpl_stl.h 已在项目网站上修复。尝试使用新版本 (0.0.2) 而不是旧版本。它应该有用,对我有用。
ctpl_stl.h 是作为 ctpl.h 的修改版创建的,目的是为了方便那些不想依赖 BOOST 无锁库的用户。 ctpl.h 是一个更好的选择,它经过了很好的测试,应该更有效率。