1
假設我有兩個線程:A,B。線程A正在運行一些指令,它們同時位於一個加載的共享庫中,線程B dlclose()
共享庫。 會發生什麼?如果我引用由dlclose卸載的指令,會發生什麼情況?
假設我有兩個線程:A,B。線程A正在運行一些指令,它們同時位於一個加載的共享庫中,線程B dlclose()
共享庫。 會發生什麼?如果我引用由dlclose卸載的指令,會發生什麼情況?
在同一過程中,兩個線程共享相同手柄以下調用dlopen()的,如果一個線程關閉打開的庫dlclose(手柄),其他線程(實際上,任何的兩者)使用句柄會導致未定義的行爲(通常,分段錯誤)。
更具體地,從dlclose man page
dlclose()
函數dlclose()遞減的動態庫句柄句柄引用計數。如果引用計數下降到零,並且沒有其他加載的庫使用它中的符號,則動態庫將被卸載。