Multithreading 避免PHU创建错误11
我正在尝试使用POSIX线程编写一个C程序,将一个正方形分成4,然后将其中的一些8再分,直到满足某些条件。。一般来说,程序是这样的:Multithreading 避免PHU创建错误11,multithreading,pthreads,overflow,Multithreading,Pthreads,Overflow,我正在尝试使用POSIX线程编写一个C程序,将一个正方形分成4,然后将其中的一些8再分,直到满足某些条件。。一般来说,程序是这样的: #include <stdio.h> #include <stdlib.h> #include <pthread.h> #define checkResults(string, val) { \ if (val) { \ p
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#define checkResults(string, val) { \
if (val) { \
printf("Failed with %d at %s\n", val, string); \
exit(1); \
} \
}
void *editSquare(void *arg);
void divide(void *arg){
int i,rc;
Square *s = (Square *) arg;
pthread_t thr[4];
Square divs[4];
for (i=0;i<4;i++){
rc=pthread_create(&thr[i],NULL, editSquare,(void *) &divs[i]);
checkResults("pthread create",rc);
}
for (i=0;i<4;i++){
rc=pthread_join(thr[i],NULL);
checkResults(" pthread join ",rc);
}
}
void *editSquare(void *arg){
int i,rc;
Square *s = (Square *) arg;
if ( !some conditions ){
// do stuff
// ...
divide(s);
}
else{
//do stuff
}
}
int main(){
Square sq;
//initialize sq
divide(&sq);
return 0;
}
#包括
#包括
#包括
#定义检查结果(字符串,val){\
如果(val){\
printf(“在%s处%d失败,\n”,val,字符串)\
出口(1)\
} \
}
void*editSquare(void*arg);
无效分割(无效*参数){
int i,rc;
平方*s=(平方*)arg;
pthread_t thr[4];
正方形divs[4];
对于(i=0;i
我得到错误代码11
这是Linux上的EAGAIN
是否有一种方法/技术可以控制/管理活动线程的数量并暂停一些线程,直到其他线程结束
当然:创建一个全局线程计数器和一个条件变量。任何新线程都会增加计数器(在互斥锁下)。当计数器即将超过某个限制时,不要创建任何新线程,而是等待条件。退出线程应减少计数器和信号条件
但由于问题的递归性质,这可能无法解决问题(当所有线程都必须创建额外的线程才能退出时,您将陷入死锁,但您没有可用的线程)
更好的解决方案是创建一个工作队列和一个线程池。池中的任何线程都会在队列中的下一个工作项可用时从队列中拾取,并将新的工作项附加到队列的末尾。非常感谢。实际上,我有点想创建一些类似于您所说的工作队列,但我在使用等待/信号cond时遇到问题。..wh我要发送信号吗?在什么情况下“工作队列”会等待?如果您不太介意的话,我希望您能告诉我在哪里放置这些信号和等待命令..提前谢谢!:D