在很久以前,Linux社区中有一个普遍共识:栈是线程关键要素,始终处于前提条件的位置。然而,有一个故事会让大家重新审视这种观念。
首先,来看一段小小的Linux线程代码:
void *thread_fn(void *arg) {
int *p = (int*) arg;
// 使用传递的参数 *p
// ………
return NULL;
}
int main() {
int p = 10;
pthread_t thread_id;
pthread_create(&thread_id, NULL, thread_fn, (void*) &p);
return 0;
}
这是一段生动而容易理解的代码:创建线程,并且将栈内变量传递给该线程,以便后续操作。在这里,“栈”是一个保存栈内变量的内存结构,以便临时记录信息,例如函数调用和参数。栈可以被各种不同的线程访问,所以它一般被认为是关键要素。
但是,近不久,Linux社区发现了一种新的观念:“栈”不再被认为是关键要素,而是全局变量的一种简单实现方式。这种思想被称为“栈深度的哲学思考”:栈深度可以是任意数量,只要程序正确运行即可。
定义栈深度理论有两种方法:它可以作为抽象概念,也可以作为典型的编程实践,以便确保程序正常运行。从抽象概念角度讲,栈深度可以定义为:对自上而下执行的程序,它允许我们确保所有调用点中的栈深度只有一定量,以保持程序的正确运行。在典型的编程实践中,它的实现也很简单,只需要定义每一个函数的栈深度。
这种思想可以极大地改善程序的灵活性,增加可维护性。它可以促进系统稳定性和可用性,确保程序更加安全。