我正在尝试使用 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;
}
这可能会很深,在某些时候我在 pthread_create 收到错误代码 11。我知道它为我的 cpu 创建了太多线程导致错误。有没有一种方法/技术我可以控制/管理活动的数量线程并暂停一些线程,直到其他一些线程结束,然后再创建它们?一般来说,有没有一种方法可以虚拟创建 N 个线程,这些线程在多个 max_threads 之后实际上并不并行运行,而是进入某种等待创建的 FIFO 队列?
(如果您认为需要,我可以更具体地了解程序或结构......)