以下是我想要实现一个线程数组的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;
}
代码中有什么问题吗?
答案 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);
}