64,651
社区成员
发帖
与我相关
我的任务
分享
thread *th=new thread[THTREAD_NUMBER];
for(int i=0;i<THREAD_NUMBER;i++)
{
th[i]=thread(taskFunc, task);
}
就这段小代码,当THREADD_NUMBER超过10 的时候,就会爆出system_error异常,提示资源不可利用[/quote]
1)Winows进程内的线程数不是10,而是大得多的一个数(你google下)
2)你的这段代码是不是反复调用了?如果是,那么我告诉你,你这里有明显的资源泄漏
可能你反复泄漏了线程句柄,达到上限,所以创建不了新线程
你代码的错误简单地说,就是new出来的那一组线程已经占用资源了,循环内赋了另外一个值,之前分配的被丢失了
[/quote]
没有循环调用,这段代码,在一个是,这是一部分,下一部分就是
for(int i=0;i<THREAD_NUMBER;i++)
{
threadList[i].join();
}
delete [] threadList;
[/quote]
你们都忽略了一个问题, 他所使用的 “thx[i]=thread( taskfunc , task);” 这个 taskfunc 这个里面是否有不可重入的代码,如果是这样, 一切就好说了。[/quote]
因为我的程序在Linux中跑是没有问题的,创建线程是抛出异常只是在Windows的vs2012中跑才会出现
thread *th=new thread[THTREAD_NUMBER];
for(int i=0;i<THREAD_NUMBER;i++)
{
th[i]=thread(taskFunc, task);
}
就这段小代码,当THREADD_NUMBER超过10 的时候,就会爆出system_error异常,提示资源不可利用[/quote]
1)Winows进程内的线程数不是10,而是大得多的一个数(你google下)
2)你的这段代码是不是反复调用了?如果是,那么我告诉你,你这里有明显的资源泄漏
可能你反复泄漏了线程句柄,达到上限,所以创建不了新线程
你代码的错误简单地说,就是new出来的那一组线程已经占用资源了,循环内赋了另外一个值,之前分配的被丢失了
[/quote]
没有循环调用,这段代码,在一个是,这是一部分,下一部分就是
for(int i=0;i<THREAD_NUMBER;i++)
{
threadList[i].join();
}
delete [] threadList;
[/quote]
你们都忽略了一个问题, 他所使用的 “thx[i]=thread( taskfunc , task);” 这个 taskfunc 这个里面是否有不可重入的代码,如果是这样, 一切就好说了。
thread *th = (thread*)mallock( THREAD_NUMBER * sizeof(thread) );
//然后
th[i]=thread( taskfunc , task);
//这个thread数组是不是有问题?
//如果按照下面的来
thread *thx = new thread[THREAD_NUMBER];
thx[i]=thread( taskfunc , task);
//貌似没有什么问题
这两个有什么区别吗?
我用string类也试了一下,如下
//情况一
string *str=new string[100];
str[0]=string("task function");
//情况二
string *strx=(string*)malloc(100*sizeof(string));
strx[0]=string("task function");
//这两者貌似都没有问题诶
这和顶楼写的不一样啊……楼主到底是用new的还是只分配了内存而没有构造?如果你跳过thread的构造函数来用,那出错也不奇怪了……
这两个有什么区别吗?
当然有区别了:new除了分配内存外,还要执行构造函数的。[/quote]
还有别的区别吗?因为采用上面的那种方式在linux(Centos)中是没有问题的,在Win7中vs2012中是有问题的
这和顶楼写的不一样啊……楼主到底是用new的还是只分配了内存而没有构造?如果你跳过thread的构造函数来用,那出错也不奇怪了……
这两个有什么区别吗?
当然有区别了:new除了分配内存外,还要执行构造函数的。
thread *th=new thread[THTREAD_NUMBER];
for(int i=0;i<THREAD_NUMBER;i++)
{
th[i]=thread(taskFunc, task);
}
就这段小代码,当THREADD_NUMBER超过10 的时候,就会爆出system_error异常,提示资源不可利用[/quote]
1)Winows进程内的线程数不是10,而是大得多的一个数(你google下)
2)你的这段代码是不是反复调用了?如果是,那么我告诉你,你这里有明显的资源泄漏
可能你反复泄漏了线程句柄,达到上限,所以创建不了新线程
你代码的错误简单地说,就是new出来的那一组线程已经占用资源了,循环内赋了另外一个值,之前分配的被丢失了
[/quote]
没有循环调用,这段代码,在一个是,这是一部分,下一部分就是
for(int i=0;i<THREAD_NUMBER;i++)
{
threadList[i].join();
}
delete [] threadList;
thread* th[THTREAD_NUMBER];
for(int i=0;i<THREAD_NUMBER;i++)
th[i] = new thread(taskFunc, task);
thread *th=new thread[THTREAD_NUMBER];
for(int i=0;i<THREAD_NUMBER;i++)
{
th[i]=thread(taskFunc, task);
}
就这段小代码,当THREADD_NUMBER超过10 的时候,就会爆出system_error异常,提示资源不可利用[/quote]
1)Winows进程内的线程数不是10,而是大得多的一个数(你google下)
2)你的这段代码是不是反复调用了?如果是,那么我告诉你,你这里有明显的资源泄漏
可能你反复泄漏了线程句柄,达到上限,所以创建不了新线程
你代码的错误简单地说,就是new出来的那一组线程已经占用资源了,循环内赋了另外一个值,之前分配的被丢失了