我想動態地將一個庫加載到獨立的作用域中,以便每個實例都有自己的內存。那可能嗎?將動態庫多次加載到多個獨立的作用域中
我想不是以便攜的方式。 dlopen
和POSIX/Unix/Linux上的朋友有可能嗎?或者至少我現在關心的是MacOSX,因爲我現在可能會在其他系統上需要它。
背景:我想要使用的庫並非設計爲多線程安全。但是,如果每個線程只使用一個獨立的lib實例,它應該可以正常工作。
更多背景:這是readline
lib。基本上增加多線程支持意味着重寫整個事情。
我想動態地將一個庫加載到獨立的作用域中,以便每個實例都有自己的內存。那可能嗎?將動態庫多次加載到多個獨立的作用域中
我想不是以便攜的方式。 dlopen
和POSIX/Unix/Linux上的朋友有可能嗎?或者至少我現在關心的是MacOSX,因爲我現在可能會在其他系統上需要它。
背景:我想要使用的庫並非設計爲多線程安全。但是,如果每個線程只使用一個獨立的lib實例,它應該可以正常工作。
更多背景:這是readline
lib。基本上增加多線程支持意味着重寫整個事情。
這樣每個實例都有自己的內存。
取決於你的意思是「自己的記憶」。顯然,在POSIX線程中,所有內存都是共享的,因此庫的一個實例不能擁有「自己的內存」。
您可能的意思是「讓每個實例都有自己的全局變量副本」,答案是肯定的:請參閱dlmopen(3) docs。您需要將LM_ID_NEWLM
傳遞給它。
要當心:這只是Linux和Solaris,GDB不知道有關加載到非默認鏈接器空間的庫,所以調試問題目前非常困難。
是的,這是我搜索的。不幸的是,我正在尋找一種在MacOSX上執行此操作的方法。 – Albert
'readline'將會使用標準輸入,正確嗎?由於這不是線程安全的(就像支持任何類型的同時使用一樣),無論如何,您將無法使用來自多個線程的'readline'。 –
@Dark Falcon:你可以指定'readline'你想讀/寫的位置。這是'rl_input' /'rl_output'(左右)。 – Albert