当前位置: 技术问答>linux和unix
关于开发多线程的调用动态库的问题
来源: 互联网 发布时间:2016-12-03
本文导语: 小弟,开发了一个多线程调用lib动态库。 在线程中的主函数Execute()里,加载动态库(dlopen),然后调用完里面的函数后(dlsym),就立即释放动态库(dlclose)。这几天经常会core,所以就想想这个设计框架,是否有问题。因为...
小弟,开发了一个多线程调用lib动态库。
在线程中的主函数Execute()里,加载动态库(dlopen),然后调用完里面的函数后(dlsym),就立即释放动态库(dlclose)。这几天经常会core,所以就想想这个设计框架,是否有问题。因为每个线程内部,都会去调用dlopen,dlclose,所以就考虑,如果两个线程间A,B,A线程先dlopen一个动态库so文件C,然后B线程也dlopen文件C,因为动态库,是可以共享的。所以这一步还不会有问题,那当A线程先结束,那它就立刻dlclose文件C,而B后结束,它又来dlclose文件C。是否就会引起释放报错而core。还有一个问题,就是这样调用dlopen加载so文件和dlclose释放so文件,是不是就占用了系统的共享内存空间,我用的IBM 570主机,CPU 16个,内存120G。而共享内存,如下
/ngjk/bin/(93)_>ipcs -mbc
IPC status from /dev/mem as of Tue May 18 16:11:08 BEIST 2010
T ID KEY MODE OWNER GROUP CREATOR CGROUP SEGSZ
Shared Memory:
m 1048576 0x00001515 --rw-rw-rw- root system root system 16
m 1048577 0x0d0227e1 --rw-rw---- root system root system 1440
m 1048578 0xffffffff --rw-rw---- root system root system 4096
这样的共享内存,是不是配置得小了点。。请各位同仁,多多给予意见和参考。
在线程中的主函数Execute()里,加载动态库(dlopen),然后调用完里面的函数后(dlsym),就立即释放动态库(dlclose)。这几天经常会core,所以就想想这个设计框架,是否有问题。因为每个线程内部,都会去调用dlopen,dlclose,所以就考虑,如果两个线程间A,B,A线程先dlopen一个动态库so文件C,然后B线程也dlopen文件C,因为动态库,是可以共享的。所以这一步还不会有问题,那当A线程先结束,那它就立刻dlclose文件C,而B后结束,它又来dlclose文件C。是否就会引起释放报错而core。还有一个问题,就是这样调用dlopen加载so文件和dlclose释放so文件,是不是就占用了系统的共享内存空间,我用的IBM 570主机,CPU 16个,内存120G。而共享内存,如下
/ngjk/bin/(93)_>ipcs -mbc
IPC status from /dev/mem as of Tue May 18 16:11:08 BEIST 2010
T ID KEY MODE OWNER GROUP CREATOR CGROUP SEGSZ
Shared Memory:
m 1048576 0x00001515 --rw-rw-rw- root system root system 16
m 1048577 0x0d0227e1 --rw-rw---- root system root system 1440
m 1048578 0xffffffff --rw-rw---- root system root system 4096
这样的共享内存,是不是配置得小了点。。请各位同仁,多多给予意见和参考。
|
如果一个线程先dlclose一个文件,比如libmy.so,接着另一个线程也来dlcloselibmy.so,这样不会出现问题,dlclose也利用了引用计数(reference count),当有多次打开时,第一次,dlclose只会使引用计数减1,所以这个应该不是产生core dump的原因;另,如果多个线程需要经常访问一些同样的lib,那没有必要关闭;因为,你加载它们是需要时间的.
|
你可以定义全局变量handle = dlopen(。。。)
在多线程中共享该变量,等线程都推出后再dlclose
在多线程中共享该变量,等线程都推出后再dlclose
|
为啥要dlopen啊,除非你需要在线更新。
|
楼上正解,你为何要反复 open, close 呢?
|
so文件一般都不太大
建议优化程序内部的内存分配方式,减少全局变量
建议优化程序内部的内存分配方式,减少全局变量
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。