首页 > 编程语言 > 详细

静态全局变量,所有函数共享,也是所有线程共享

时间:2017-01-05 20:19:46      阅读:325      评论:0      收藏:0      [点我收藏+]

http://www.php-internals.com/book/?p=chapt08/08-03-zend-thread-safe-in-php

第三节 PHP中的线程安全

从作用域上来说,C语言可以定义4种不同的变量:全局变量,静态全局变量,局部变量,静态局部变量。 下面仅从函数作用域的角度分析一下不同的变量,假设所有变量声明不重名。 - 全局变量,在函数外声明,例如,int gVar;。全局变量,所有函数共享,在任何地方出现这个变量名都是指这个变量。 - 静态全局变量(static sgVar),其实也是所有函数共享,但是这个会有编译器的限制,算是编译器提供的一种功能。 - 局部变量(函数/块内的int var;),不共享,函数的多次执行中涉及的这个变量都是相互独立的,他们只是重名的不同变量而已。 - 局部静态变量(函数中的static int sVar;),本函数间共享,函数的每一次执行中涉及的这个变量都是这个同一个变量。

上面几种作用域都是从函数的角度来定义作用域的,可以满足所有我们对单线程编程中变量的共享情况。 现在我们来分析一下多线程的情况。在多线程中,多个线程共享除函数调用栈之外的其他资源。 因此上面几种作用域从定义来看就变成了。 - 全局变量,所有函数共享,因此所有的线程共享,不同线程中出现的不同变量都是这同一个变量。 - 静态全局变量,所有函数共享,也是所有线程共享。 - 局部变量,此函数的各次执行中涉及的这个变量没有联系,因此,也是各个线程间也是不共享的。 - 静态局部变量,本函数间共享,函数的每次执行涉及的这个变量都是同一个变量,因此,各个线程是共享的。

静态全局变量,所有函数共享,也是所有线程共享

原文:http://www.cnblogs.com/yuanjiangw/p/6253610.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!