我应该在dlopen之前锁定
should I lock before dlopen?
i确实有一个 *.so库,该库使用dlopen从系统库中获取一些信息。库可以同时由多个应用程序使用。也许这是一个愚蠢的问题,但是我应该在上面做dlopen之前蜂拥而至吗?我在任何地方都没有找到直接答案。
与评论中所说的类似,您不需要信号量(羊群),除非您访问可能会改变您的共享资源。(即访问共享内存并需要确保该数据并发)。动态加载的方式... dlopen()...工作
这两个例程实际上是简单的包装器,可以回到动态链接器。当动态链接器通过dlopen(),它执行相同的重定位和符号分辨率任何其他库,因此动态加载程序可以没有任何特殊安排回电回到已经加载的例程
由于链接的工作方式,因此在(调用dlopen的过程)的内存空间中完成了对got/plt的修改,而不是映射共享对象的位置。
如果一百个过程使用共享库,那么拥有内存中的100份代码副本占据了空间。如果代码是完全只读,因此,从来没有修改过
将共享对象放在只读的内存中,您永远不必担心它们突然变化,因此不需要羊群:)!
注意:因为您有一个共享对象链接到其他共享对象...最初的共享对象的获取需要更新/mod,并使用dlopen()加载的库的重新定位...但是存储在过程的r/w段中,而不是共享对象的内存空间。
共享库必须在每个中都有一个未Qiue数据实例流程...读写数据部分始终放在已知的偏移范围内摘自库的代码部分。这样,通过虚拟内存,每个过程都会看到自己的数据部分,但可以共享未修改的代码
相关文章:
- 如何找到锁定Linux futex的C++行
- G锁定铸造到基础上会释放模拟行为
- 如何检查线程是否锁定
- 如何在C++中找到active directory中禁用和锁定的窗口帐户
- 我应该在锁定TBitmap画布后解锁它吗
- C++ 11 中的锁定是否保证访问数据的新鲜度?
- 在两个线程上读/写 64 位,无互斥/锁定/原子
- 如何在实时应用程序中锁定线程
- 对 DLOPEN 的未定义引用
- 在 lambda 中锁定 std::shared_ptr 的复制操作
- Linux 可执行文件通过 dlopen 在emplace_back崩溃打开共享库
- 使用 dlopen 加载派生的多态类
- 使用简单两相锁定的并发程序
- 锁定来自其他线程的类成员
- 他们如何将红外锁定像素转换为镜头前方 1m 的正常平面上的位置
- 同一互斥锁顺序上的锁定和解锁是否一致?
- 共享内存的升压容器是否实现锁定?
- 当只有一个线程主要使用该对象而其他线程很少使用它时,如何最小化该对象的互斥锁锁定?
- 如何在 x86 处理器上实现"锁定添加"
- 我应该在dlopen之前锁定