⓪編著: 蕭沖

我們知道dll最主要的用途就是在於程式碼共享。而共享的過程中又會演生出全域資料(變數)是否共享的問題。

在多個process間共用同一個dll時,變數的共享與否是靠二個機制:
1/ 不共享全域變數 : 使用copy-on-write的觀念來處理  ( windows 系統自動預設是如此)
2/ 共享全域變數: 我們可以透過把變數放入一個share的segment的記憶體區段內,然後process間就可以共用。



在同一個process裡,多個「相同」thread共用一個dll的程式碼時的變數共享問題:
1/ 預設的情形下,任意的thread都可以共享取用該dll裡的全域變數。
2/ 若要不共享該dll裡的全域變數,則要考TLS (thread local storage)機制。

創作者介紹
創作者 aftcast 的頭像
aftcast

蕭沖的書房

aftcast 發表在 痞客邦 留言(2) 人氣()


留言列表 (2)

發表留言
  • hi
  • 意見

    方式2可以在編譯時期或執行時期對 segment 作屬性設定.

    這通常的應用在SetWindowsHookEx 的返回 handle 必須在所有
    dll 中都一樣.
  • zz
  • 聽君一席話,勝讀十年書