创建N个线程 [英] Creating N number of threads
问题描述
我编写了以下代码来创建N个线程并打印每个线程的线程ID.
I wrote the following code to create N number of threads and print the thread ID of each thread.
#include<stdio.h>
#include<pthread.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/syscall.h>
#include <unistd.h>
void *threadFunction (void *);
int main (void)
{
int n=0,i=0,retVal=0;
pthread_t *thread;
printf("Enter the number for threads you want to create between 1 to 100 \n");
scanf("%d",&n);
thread = (pthread_t *) malloc (n*sizeof(pthread_t));
for (i=0;i<n;i++){
retVal=pthread_create(&thread[i],NULL,threadFunction,(void *)&i);
if(retVal!=0){
printf("pthread_create failed in %d_th pass\n",i);
exit(EXIT_FAILURE);
}
}
for(i=0;i<n;i++){
retVal=pthread_join(thread[i],NULL);
if(retVal!=0){
printf("pthread_join failed in %d_th pass\n",i);
exit(EXIT_FAILURE);
}
}
}
void *threadFunction (void *arg)
{
int threadNum = *((int*) arg);
pid_t tid = syscall(SYS_gettid);
printf("I am in thread no : %d with Thread ID : %d\n",threadNum,(int)tid);
}
我传递给每个线程的参数是一个计数器i,对于每个新线程,该计数器从0递增到n-1. 但是在输出中我看到我所有线程的值均为零,无法理解,有人可以解释一下.
the Argument i am passing to each thread is a counter i which increments from 0 to n-1 for each new thread. But while at the output i see i has the value zero for all the threads, not able to undestand , can somebody please explain.
Enter the number for threads you want to create between 1 to 100
5
I am in thread no : 0 with Thread ID : 11098
I am in thread no : 0 with Thread ID : 11097
I am in thread no : 0 with Thread ID : 11096
I am in thread no : 0 with Thread ID : 11095
I am in thread no : 0 with Thread ID : 11094
推荐答案
问题出在以下几行:
retVal=pthread_create(&thread[i],NULL,threadFunction,(void *)&i);
请勿传递i
的地址,因为i
在主函数中会不断变化.而是传递i的值,并在线程函数中适当地进行类型转换并使用.
Don't pass the address of i
, as i
keeps changing in the main function. Instead pass the value of i and typecast it appropriately in the thread function and use.
例如,传递如下值:
retVal=pthread_create(&thread[i],NULL,threadFunction,(void *)i);
在线程函数访问中,如下所示:
In the thread function access as below:
void *threadFunction (void *arg)
{
int threadNum = (int)arg;
pid_t tid = syscall(SYS_gettid);
printf("I am in thread no : %d with Thread ID : %d\n",threadNum,(int)tid);
}
这篇关于创建N个线程的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!