我正在为我编写的一个简短程序运行一些测试。它运行另一个程序,根据我给它的输入执行一些文件操作。这个程序的整个目的是将大量的工作分成更小的数据包以提高性能(向程序的10个版本发送10个较小的数据包,而不是等待一个较大的数据包执行,简单的分而治之)。
问题在于,虽然我认为我已经限制了将要创建的线程数,但我设置的测试消息表明运行的线程比应该存在的多得多。我真的不确定我在这里做错了什么。
代码段:
if (finish != start){
if (sizeOfBlock != 0){
num_threads = (finish - start)/sizeOfBlock + 1;
}
else{
num_threads = (finish-start) + 1;
}
if (num_threads > 10){ // this should limit threads to 10 at most
num_threads == 10;
}
else if (finish == start){
num_threads = 1;
}
}
threads = (pthread_t *) malloc(num_threads * sizeof(pthread_t));
for (i = 0; i < num_threads; i++){
printf("Creating thread %d\n", i);
s = pthread_create(&threads[i], NULL, thread, &MaxNum);
if (s != 0)
printf("error in pthread_create\n");
if (s==0)
activethreads++;
}
while (activethreads > 0){
//printf("active threads: %d\n", activethreads);
}
pthread_exit(0);
答案 0 :(得分:2)
此代码无用:
if (num_threads > 10){ // this should limit threads to 10 at most
num_threads == 10
}
num_threads == 10
将num_threads
与10
进行比较,然后将其抛弃。你想要分配:
if (num_threads > 10){ // this should limit threads to 10 at most
num_threads = 10;
}
此外,您的代码中遗漏了许多;
,将来,请尝试提供一个自包含的代码编译示例。