写GStreamer插件的时候,不要使用全局变量!
2011-01-03 11:07
302 查看
在写gstreamer element的时候,不能使用全局变量。因为element可能在一个进程中被创建多个,比如一个pipeline中就可能有多个queue。要把这些变量全部放到该element的class中去,作为成员变量即可。因为一个进程如果使用了多个该element的话,会创建多个GObject,所以,成员变量也会有多份。如果写成全局变量,那就所有的object共享一个了,会出问题。(其实就把GObject看成一个structure好了,多个GObject在内存中就是多个structure,所以,成员变量不会冲突。而全局变量始终只有一份的)。
之前还写代码研究过动态库中的全局变量的问题。当一个动态库被多个程序加载时,在内存中动态库只有一份,那么,多个程序同时使用的时候,动态库中的全局变量是否会出问题?答案是不会,因为动态库的数据段每个程序(进程)是独立的,代码段可能是共享的。动态库中的全局变量是copy-on-write的机制,一旦有写入的操作,就会创建一份新的copy出来。
之前还写代码研究过动态库中的全局变量的问题。当一个动态库被多个程序加载时,在内存中动态库只有一份,那么,多个程序同时使用的时候,动态库中的全局变量是否会出问题?答案是不会,因为动态库的数据段每个程序(进程)是独立的,代码段可能是共享的。动态库中的全局变量是copy-on-write的机制,一旦有写入的操作,就会创建一份新的copy出来。
相关文章推荐
- [Spark经验一]Spark RDD计算使用的函数里尽量不要使用全局变量
- springMVC 中使用 filter过滤 和 global 启动的时候 添加全局变量
- (本程序功能:字符串A中找出包含字符串B中所有字符的位置并输出) 在使用全局变量m的时候,输出错误的结果,而用下面局部变量M就没问题。
- 使用Lua 局部变量来优化性能,同一时候比較局部变量和全局变量
- 没有使用全局变量的必要时,就尽量不要使用全局变量。
- 尽量不要使用全局变量
- mybatis 使用的时候,表的字段不要重复
- c语言中头文件的建立与使用-函数、全局变量、全局数组
- android 使用Application保存全局变量
- android中使用全局变量
- Android用Application设置全局变量以及使用
- C++ 和 C语言 头文件使用全局变量的异同
- 在python中实现生产者和消费者的例子(四):使用thread模块和全局变量
- 记C++坑:1.被自己坑了一次的全局变量使用
- MFC中全局变量的定义及使用
- Python 继承结构中全局变量的使用
- 在企业级应用开发中,使用全局jsp变量为所有jsp页面配置信息
- 递归调用中使用全局变量或者函数参数
- python 在函数中使用全局变量的注意事项
- [转]android使用全局变量的两种方法