【发布时间】:2014-04-19 16:09:43
【问题描述】:
所以我有一小段代码,理论上可以很容易地进行parrelized。
结构很简单,和下面的很相似:
for (int i = 0; i < some_value; ++i) {
// we have a function called do_stuff
// somewhere in the code
// Create a new pthread
// using do_stuff as start routine
}
现在所有变量都不会在线程之间共享。也就是说,线程之间不需要变量的相互通信。但是我确实使用变量i 将数据写入数组等。
我想知道的是:如果我将变量 i 作为 pthread 启动例程的参数传递并且 i 的值发生变化(因为在下一次循环迭代中 i 会增加),是否已经存在的线程中i 的值也改变了?
【问题讨论】:
-
你打算如何将它传递给线程?
-
这取决于你如何传递变量,以及它在哪里声明。每个线程都有自己的堆栈,因此它们有自己的局部变量(除非它们是静态的) C 中的所有内容都是按值传递的,因此会制作一个副本,但您可能会做其他事情,例如将指针传递给
i。但不清楚你所说的线程函数是什么意思,函数不是线程的——你创建线程,线程调用函数。 -
我相信他调用'线程函数'就是你调用
pthread_create时提供的函数
标签: c linux multithreading pthreads