http://www.php-internals.com/book/?p=chapt08/08-03-zend-thread-safe-in-php
从作用域上来说,C语言可以定义4种不同的变量:全局变量,静态全局变量,局部变量,静态局部变量。 下面仅从函数作用域的角度分析一下不同的变量,假设所有变量声明不重名。 - 全局变量,在函数外声明,例如,int gVar;
。全局变量,所有函数共享,在任何地方出现这个变量名都是指这个变量。 - 静态全局变量(static sgVar
),其实也是所有函数共享,但是这个会有编译器的限制,算是编译器提供的一种功能。 - 局部变量(函数/块内的int var;
),不共享,函数的多次执行中涉及的这个变量都是相互独立的,他们只是重名的不同变量而已。 - 局部静态变量(函数中的static int sVar;
),本函数间共享,函数的每一次执行中涉及的这个变量都是这个同一个变量。
上面几种作用域都是从函数的角度来定义作用域的,可以满足所有我们对单线程编程中变量的共享情况。 现在我们来分析一下多线程的情况。在多线程中,多个线程共享除函数调用栈之外的其他资源。 因此上面几种作用域从定义来看就变成了。 - 全局变量,所有函数共享,因此所有的线程共享,不同线程中出现的不同变量都是这同一个变量。 - 静态全局变量,所有函数共享,也是所有线程共享。 - 局部变量,此函数的各次执行中涉及的这个变量没有联系,因此,也是各个线程间也是不共享的。 - 静态局部变量,本函数间共享,函数的每次执行涉及的这个变量都是同一个变量,因此,各个线程是共享的。
原文:http://www.cnblogs.com/yuanjiangw/p/6253610.html