1

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

4

1 回答 1

0

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

更具体地说,来自dlclose 手册页

dlclose()

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

于 2013-05-31T03:15:29.537 回答