背景說明:
dll中存在很多業務邏輯,包括網路連線的管理。dll中的所有業務採用多執行緒管理,假設dll中有兩個工作執行緒workthread1和workthread2。dll中存在乙個日誌記錄系統,採用單件形式編寫,單件例項的獲取採用區域性靜態物件的方式。主控制類也採用了單件,單件例項獲取同前。
1、主線程裝載dll,呼叫dll介面並建立了主控制類單件;
2、workthread1中首次呼叫日誌記錄系統,所有區域性靜態物件在首次呼叫時建立;
3、解除安裝dll,收到dll_process_detach,然後呼叫主控制類的析構,這時呼叫日誌單件則報錯。原因是日誌單件也釋放。
4、日誌記錄單件和主控制類的單件的靜態區域性變數例項均由主線程釋放,但日誌單件例項釋放較早,導致錯誤。
C語言中區域性靜態變數的特點
c語言存在以下三種作用域 全域性變數 檔案內部的靜態變數 區域性變數 全域性變數 靜態變數 包括上圖中的 檔案內部的靜態變數 和 區域性靜態變數 都具有靜態儲存期,變數的壽命週期從程式執行時即開始,到程式關閉時結束,其一直存在於記憶體的同乙個位址上。也就是說,可以將區域性靜態變數理解為一種限定了作用...
區域性靜態變數
全域性變數,區域性靜態變數,全域性靜態變數均儲存在靜態儲存區,區域性變數儲存在棧上,而new出來的變數則儲存在堆裡。區域性靜態變數具有區域性作用域,它只被初始化一次,到程式結束前都一直存在,在自身函式體內是可見的,在函式體外是不可見的。而區域性變數只是在函式體內存在,函式結束時消失 全域性變數則是在...
C中區域性變數 全域性變數和靜態變數辨析
根據區域性和全域性 靜態和非靜態,可以將變數分為4種 非靜態區域性變數 非靜態全域性變數 靜態區域性變數和靜態全域性變數,為方便起見,下稱為區域性變數 全域性變數 靜態區域性變數和靜態全域性變數。從作用域上 1.區域性變數只在宣告它的函式中可用 2.全域性變數在宣告它的原始檔中可用,可通過exter...