当前位置:  技术问答>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

这样的共享内存,是不是配置得小了点。。请各位同仁,多多给予意见和参考。

|
如果一个线程先dlclose一个文件,比如libmy.so,接着另一个线程也来dlcloselibmy.so,这样不会出现问题,dlclose也利用了引用计数(reference count),当有多次打开时,第一次,dlclose只会使引用计数减1,所以这个应该不是产生core dump的原因;另,如果多个线程需要经常访问一些同样的lib,那没有必要关闭;因为,你加载它们是需要时间的.

|
你可以定义全局变量handle = dlopen(。。。)
在多线程中共享该变量,等线程都推出后再dlclose

|
为啥要dlopen啊,除非你需要在线更新。

|
楼上正解,你为何要反复 open, close 呢?

|
so文件一般都不太大

建议优化程序内部的内存分配方式,减少全局变量

    
 
 

您可能感兴趣的文章:

  • 请问Linux核心支持多线程吗?开发库有线程库吗?线程好用吗?(稳定?)
  • 请问谁在SCO上做过开发?支持多线程开发吗?
  • linux下多线程开发遇到的调度问题!!!急~~~~~在线等!
  • 请各位指点下嵌入式linux应用程序开发关于线程和进程的选用
  • Java多线程开发包 JEgg
  • 项目需要,麻烦有做过Linux平台c++语言多线程开发的同学进来看下
  • 有关Linux下开发程序--上万个线程问题。菜鸟问(来者有分,谢谢大家)
  • 线程开发库 pthreads-win32
  • 在linux下使用POSIX多线程库开发应用程序的时候需要定义宏_POSIX_C_SOURCE和_REENTRANT吗?
  • Android开发笔记之:如何安全中止一个自定义线程Thread的方法
  • linux下开发多线程程序,老是报这个错,怎么了?
  • unix/linux上用多线程还是多进程开发程序好?
  • python使用urllib模块开发的多线程豆瓣小站mp3下载器
  • android开发教程之子线程中更新界面
  • 【linux菜鸟第一帖】:请问多线程开发,为何不能设置多个线程的优先级问题?
  • vmware下是不是能用pthread进行多线程开发
  • android开发教程之使用线程实现视图平滑滚动示例
  • android开发教程之handle实现多线程和异步处理
  • C++开发:为什么多线程读写shared_ptr要加锁的详细介绍
  • jquery iis7站长之家
  • QT 调用 GTK开发的.so失败
  • 开发android应用程序时,用java调用so库输出日志问题
  • 请问在Unix下开发ftp传输模块,有没有什么系统函数可以调用。
  • 请问各位linux开发大虾,linux下有类似VC中depends的工具可以查看文件调用了哪些so文件吗?
  • 求助 ubuntu系统下C开发调用内核函数总报ndefined reference错误
  • 请问下,在开发EJB时,接口,home,和bean的名字是不是一定要统一的??home是怎么知道该调用哪个bean呢??
  • 大家好,初学Java, 我用的JDK1.2与Visual J++有什么区别?你们用的是什么工具?在DOS下编译与调试不是很麻烦吗?VJ开发的JavaBean是否也可用Jdk、JSP等来调用?
  • php如何调用c#开发的dll类库?
  • PHP调用C#开发的dll类库方法
  • Android开发中怎样调用系统Email发送邮件(多种调用方式)
  • 安卓应用开发通过java调用c++ jni的图文使用方法
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • vc编写dll动态连接库(编译过的)能在unix上开发使用吗?
  • 用GTK开发的程序如何在没有GTK动态连接库的Linux里运行?
  • linux的动态链接库开发的时候,基类带有虚成员函数的话会找不到符号。
  • 最近有jsp的一本书,好像叫《JSP开发动态网站》,请问确切名称、出版社、价格、作者(网上查不到)
  • 同一个开发包,为什么在linux下生成的动态库比windows上大这么多?
  • 基于Oracle的高性能动态SQL程序开发
  • DHCP:解析开发板上动态获取ip的2种实现方法详解
  • 基于JSP的动态网站开发技术
  • JSP动态网站开发环境配置详细方法第1/2页
  • c#开发的程序安装时动态指定windows服务名称
  • VS2012+MySQL+SilverLight5的MVVM开发模式介绍
  • linux 嵌入式开发用不用买开发板,买什么样的开发板?
  • ios app 开发中ipa重新签名步骤介绍
  • 请问shell 开发能开发什么样的程序?硬件的驱动程序是否能够开发呢?
  • 几个windows平台C++开发错误举例
  • 请问在Linux 下用C开发移动增值软件都有什么开发工具啊,我以前一直在Windows下用VC开发
  • IOS开发:UIScrollView类介绍及如何简单地截获touch事件
  • 我常未开发过Linux下的程序,请问Linux下可以使用那些开发工具,最好的开发工具是什么版本?
  • nginx最新主线开发版1.5.4发布及下载地址
  • 我是学习web开发的,主要是java开发SSH开发框架和ajax等。我想知道有没有必要学习一下linux相关知识。
  • Web前端开发如何利用css样式来控制Html中的h1/h2/h3标签不换行
  • 各位设备驱动开发的朋友,请问,linux设备驱动开发和网络编程开发哪一样工资比较高呀?
  • ​基于Docker的大数据开发实践
  • Linux Kernel/Network 技术QQ群14888802,只加有内核开发、TCP/IP协议栈开发的程序员,不加新手和做应用开发的程序员。
  • Android及andriod无线网络Wifi开发的几点注意事项
  • 驱动程序开发和嵌入式开发有什么联系吗?
  • Linux 下c++开发error while loading shared libraries问题解决
  • linux 嵌入式开发用买开发板吗?
  • Android开发需要的几点注意事项总结
  • web开发和嵌入式开发哪个更有挑战
  • IOS开发之socket网络编程(基于SimpleNetworkStreams的c/s程序)


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3