【发布时间】:2015-11-13 03:00:06
【问题描述】:
我试图了解 TCB 中的细节(线程控制块以及每个线程状态和共享状态之间的差异。我的书有自己的 pthread 实现,因此它给出了这个迷你 C 程序的示例(我没有把整件事都打出来)
#include "thread.h"
static void go(int n);
static thread_t threads[NTHREADS];
#define NTHREADS 10
int main(int argh, char **argv) {
int i;
long exitValue;
for (i = 0; i < NTHREADS; i++) {
thread_create(&threads[i]), &go, i);
}
for (i = 0; i < NTHREADS; i++) {
exitValue = thread_join(threads[i]);
}
printf("Main thread done".\n);
return 0;
}
void go(int n) {
printf("Hello from thread %d\n", n);
thread_exit(100 + n);
}
变量i 和exitValue(在main() 函数中)是什么例子?它们不是共享状态,因为它们不是全局变量,但我不确定它们是否也是每个线程的状态。 i 在创建每个线程时用作 go 函数的参数,所以我对此有点困惑。 exitValue 的范围仅限于main(),因此看起来它只是存储在进程的堆栈中。作为 void go() 参数的 int n 将是每个线程的变量,因为它的值对于每个线程都是独立的。我不认为我完全理解这些概念,所以任何帮助将不胜感激!谢谢!
【问题讨论】:
-
在开始线程之旅之前,您应该非常熟悉堆栈、堆和程序数据之间的区别,以及它们的生命周期/使用情况。跨度>
-
我不同意
int n参数是每个线程的变量。每次调用go。例如,如果go是递归的,则单个线程将具有 两个 不同的此类变量。
标签: c multithreading pthreads