Multithreading 避免PHU创建错误11

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

我正在尝试使用POSIX线程编写一个C程序,将一个正方形分成4,然后将其中的一些8再分,直到满足某些条件。。一般来说,程序是这样的:

#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