C语言for循环创建线程

标签 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. 线程创建 -> printHelloWorld
  3. i++(i=1); -> 通过 for 循环
  4. 我在 printHelloWorld 中打印 arg。我认为 arg 是 0 但结果 arg 是 1;

//所以我认为使用数组 -> 但使用 20 字节内存。

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

最佳答案

您可能会问,为什么第一个线程从 i 获取值 1,而不是预期的 0。

这样做的原因是,您传递了对 i 的引用。对 i 的每一次更改都是对每个引用它的人的更改。您必须为每个线程创建一个副本。

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

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 );
}

在 Safari 中输入。

function() 必须在其末尾释放分配的内存。

void *function( void *param ) 
{
  int i = *param;
  free( param );
  …
}

关于C语言for循环创建线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48275859/

相关文章:

c++ - 从基于 c++0x std::thread 的 C++ 库中公开完整的(C 语言)pthread 接口(interface)

c - c中字符串数组的函数

c - 不打印时变量地址不对齐

c++ - automake 和项目依赖

javascript - 创建调色板列表循环问题

C pthread 从多个线程访问数组

iphone - 如何在 mac 或 iphone 上接收和播放 SHOUTcast 音频流?

c++ - 在通用 C++ 代码中移动基于范围的循环?

javascript - Jquery Onload 函数停止 for 循环,在函数内部传递 for 循环 x

在 linux (htop) 上更改线程名称