#include <pthread.h>
#include <stdio.h>
#include <math.h>
#include <stdio.h>
#include <pthread.h>
#define NO_OF_THREADS 5
void print_function(int* i)
{
int count;
for(count=0; count<10; count++)
printf("Hello world from thread %d\n",*i);
pthread_exit(NULL);
}
int main()
{
pthread_t printThreads[NO_OF_THREADS];
int thread_no[NO_OF_THREADS];
int i;
for(i=0; i<NO_OF_THREADS; i++)
{
thread_no[i] = i;
pthread_create(&printThreads[i], NULL, print_function,&thread_no[i]);
}
int j;
for(j=0;j<NO_OF_THREADS;j++)
pthread_join(printThreads[j],NULL);
puts("Main over and out");
return 0;
}
不只是将计数器变量 i
的地址作为参数直接传递
对于 pthread_create
函数,它首先被分配给一个数组的一个未使用的槽
然后数组元素的地址作为参数传递。这个做完了
避免在父线程和创建的线程之间访问 i
的竞争条件。
解释如果变量 i
直接传递给线程会发生什么。
最佳答案
当然,变量可以“直接”传递而没有风险,只要它成功转换为 void *
即可。如果使用该方法,则不需要每线程缓冲。
传递单个位置的地址(main()
中i
的地址),其内容随着更多线程的创建而变化,是当然是疯狂。
关于c - 如果在这段代码中直接将变量 i 传递给线程会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19158543/