实现一个线程数组

时间:2015-10-17 07:07:15

标签: c multithreading pthreads

以下是我想要实现一个线程数组的c程序。 有两个线程函数。我想在每个函数中发送一个int值。但代码没有提供任何输出。 示例程序:

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


void * threadFunc1(void * arg)
{

    int id = *((int *) arg);
    printf("Inside threadfunc2 for thread %d",id)
}

void * threadFunc2(void * arg)
{
    int i= *((int *)arg);
    printf("Inside threadfunc2 for thread %d",i)

}

int main(void)
{

    pthread_t thread[10];

    for(int i=0;i<10;i++)
    {

        pthread_create(&thread[i],NULL,threadFunc1,(void*)&i ); // want to send the value of i inside each thread

        pthread_create(&thread[i],NULL,threadFunc,(void*)&i );
    }


    while(1);
    return 0;
}

代码中有什么问题吗?

2 个答案:

答案 0 :(得分:1)

只需在线程函数内的printf中的字符串中添加一个“\ n”终结符。这会强制flushing the output buffer

您粘贴的代码中也存在一些语法错误,但您可能很容易理解这些错误。您可以使用pthread_join()代替while (1); ...

答案 1 :(得分:0)

线程[i]应该是pthread_create返回的新线程的唯一标识符。(它将保存新创建的线程的线程ID。)但是,在这里提供的代码中,线程[i]是被第二个pthread_create()覆盖。一种方法可能是为threadFunc1和threadFunc提供单独的pthread_t数组,如下所示:

为了将数据类型int的参数传递给线程,您需要在堆上分配一个int并将其传递给pthread_create(),如下所示:

pthread_t thread_func[10];
pthread_t thread_func1[10];

确保在相应的线程函数中释放堆中的内存,如下所示:

for(i=0;i<10;i++)
{
    int *arg = malloc(sizeof(*arg));
    *arg = i;
    pthread_create(&thread_func[i],NULL,threadFunc,(void*)arg ); 
    int *arg1 = malloc(sizeof(*arg1));
    *arg1 = i;
    pthread_create(&thread_func1[i],NULL,threadFunc1,(void*)arg1 );
}

另外,使用pthread_join而不是while结尾:

void *threadFunc(void *i) {
    int a = *((int *) i);
    printf("threadFunc : %d \n",a);
    free(i);
}
void *threadFunc1(void *i) {
    int a = *((int *) i);
    printf("threadFunc1 : %d \n",a);
    free(i);
}