不确定为什么会产生这么多线程

时间:2014-01-06 17:25:37

标签: c multithreading

我正在为我编写的一个简短程序运行一些测试。它运行另一个程序,根据我给它的输入执行一些文件操作。这个程序的整个目的是将大量的工作分成更小的数据包以提高性能(向程序的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);

1 个答案:

答案 0 :(得分:2)

此代码无用:

if (num_threads > 10){  // this should limit threads to 10 at most
    num_threads == 10
}

num_threads == 10num_threads10进行比较,然后将其抛弃。你想要分配:

if (num_threads > 10){  // this should limit threads to 10 at most
    num_threads = 10;
}

此外,您的代码中遗漏了许多;,将来,请尝试提供一个自包含的代码编译示例。