c语言for循环创建线程

时间:2018-01-16 07:17:45

标签: c for-loop pthreads

我希望使用for循环创建5个主题 - 这样的循环,

for(int i=0;i<5;i++){
   pthread_create(...., NULL, printHelloWorld, (void *)&i);
}

void printHelloWorld(void *arg){
   printf("%d\n", *(int *)arg);
}

//在此代码中

  1. I = 0
  2. 主题创建 - &gt; printHelloWorld
  3. i ++(i = 1); - &GT; by for loop
  4. 我在printHelloWorld中打印arg。我认为arg为0但结果arg为1;
  5. //所以我认为使用数组 - &gt;但使用20byte内存。

    //我想使用小于20byte的内存。 你有好主意吗?

1 个答案:

答案 0 :(得分:0)

可能你在问,为什么第一个线程从cell.textLabel.text = LocalizedString(@"nice title",nil); 获得的值为1而不是预期的0。

原因是,您将引用传递给i。对i的每次更改都会对所有参与其中的人进行更改。您必须为每个线程创建一个副本。

这会导致您的代码出现另一个问题:如果线程的运行时间超过创建代码,则i将在内存中丢失,并且传递的引用无效。你应该这样做:

i

输入Safari。

for(int i=0;i<5;i++) { int *arg = malloc( sizeof int ); // Likely you want to have a bigger structure. *arg = i; pthread_create(...., NULL, function, arg ); } 必须在最后释放分配的内存。

function()