假设我有两个线程:A,B。线程A正在运行一些同时位于加载的共享库中的指令,线程B dlclose()
共享库。
会发生什么?
答案 0 :(得分:0)
在同一进程中,如果一个线程用 dlclose(句柄)关闭打开的库,则在调用 dlopen()之后,两个线程共享相同的句柄 ),使用句柄的另一个线程(实际上是两个中的任何一个)会导致未定义的行为(通常是 Segmentation fault )。
更具体地说,来自dlclose man page
dlclose()
函数dlclose()减少动态库句柄句柄上的引用计数。如果引用计数降为零且没有其他已加载的库在其中使用符号,则卸载动态库。