如果我引用由dlclose卸载的指令会发生什么?

时间:2013-05-31 02:56:15

标签: posix

假设我有两个线程:A,B。线程A正在运行一些同时位于加载的共享库中的指令,线程B dlclose()共享库。 会发生什么?

1 个答案:

答案 0 :(得分:0)

在同一进程中,如果一个线程用 dlclose(句柄)关闭打开的库,则在调用 dlopen()之后,两个线程共享相同的句柄,使用句柄的另一个线程(实际上是两个中的任何一个)会导致未定义的行为(通常是 Segmentation fault )。

更具体地说,来自dlclose man page

  

dlclose()

     

函数dlclose()减少动态库句柄句柄上的引用计数。如果引用计数降为零且没有其他已加载的库在其中使用符号,则卸载动态库。