gpt4 book ai didi

c - 如果在这段代码中直接将变量 i 传递给线程会发生什么?

转载 作者:太空宇宙 更新时间:2023-11-04 03:53:16 26 4
gpt4 key购买 nike

#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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com