这是一个奇怪的问题,所以我会尽力解释。我以下列方式创建了两种不同类型的线程:
pthread_t *first
pthread_t *second
void function(int a, int b){
first= new pthread_t[a];
for(int i = 0; i < a; i++){
int *aa = (int*)malloc(sizeof(*aa));
*aa = i;
pthread_create(&first[i], NULL, method1, (void *)aa);
}
second= new pthread_t[b];
for(int j = 0; j < b; j++){
int *bb= (int*)malloc(sizeof(*bb));
*bb= j;
pthread_create(&second[i], NULL, method2, (void *)bb);
}
for(int k = 0; k < a; k++){
pthread_join(first[k], NULL);
}
for(int l = 0; l < b; l++){
pthread_join(second[l], NULL);
}
我后来有两个循环,以便从主线程pthread_join到两个数组中包含的线程。我也有两个相同形式的简单函数:
method(void* id){
write id to file
}
我伪造了它,因为我发现它并不重要,我发现内存管理在这里很重要。我成功地为这两种方法写入了文件(不同类型的线程的不同方法)但是无论我传递给a和b的函数的是什么参数,我总是打印&#34; 0&#34;的id。所以看起来每个类型中只有一个线程实际上正在执行而不是多个并发线程正在执行。
有人可以帮助查明问题吗?我实际上是在运行多个线程并意外地给它们提供相同的ID,或者某种方式只是每种类型的一个线程运行而其余的什么都不做?有没有办法让所有其他线程开始并行运行0?
感谢。