创建动态线程数时出错

时间:2018-11-24 07:58:59

标签: c multithreading

我正在尝试创建动态数量的线程.....

#include<stdio.h>
#include<pthread.h>

void* thread_function(void)
{
    printf("hello");
}
int main(int argc,char *argv[])
{
    int noOfThread= atoi(argv[1]);
    pthread_t thread_id[noOfThread];
    int i;
    int status;
    for(i=0;i<noOfThread;i++)
    {
        pthread_create (&thread_id[i], NULL , &thread_function, NULL);
    }  

    for(i=0;i<noOfThread;i++)
        pthread_join(thread_id[i],NULL);   
}

3个错误:

  1. 隐式声明函数atoi ....
  2. 通过不兼容的指针类型传递“ pthread_create”的论点3
  3. 期望'void *(*)(void *)',但争论的焦点是'void *(*)(void)'......

1 个答案:

答案 0 :(得分:2)

这里有几个问题:

  1. 您需要包括stdlib.h来声明atoi()
  2. pthread任务函数具有void *参数。这将解决问题2和问题3。 (http://man7.org/linux/man-pages/man3/pthread_create.3.html)。

    void* thread_function(void* arg);
    
  3. 为便于移植并与较早的C编译器兼容,应显式使用malloc分配pthread_t数组。在这种情况下,请确保检查NULL返回值并稍后释放内存。或者,您可以声明要分配的最大线程数,并使用恒定的数组大小。

    pthread_t* thread_id = malloc(noOfThread*sizeof(pthread_t));