facebook貢獻給apache的開源rpc元件thrift有著廣泛的應用,c++中使用thrift也十分普遍,但由於thrift的handler會被多個執行緒呼叫,因而多執行緒中應用並不直接的友好,利用c++的「thread_local」特性或gcc的「__thread」特性可化簡這一問題。
看具體例項,有一thrift service:xservice,編譯後生成介面檔案xserviceif,介面的例項類為xhandler:
classxhandler: publicxservice
;由於xhandler會被多個執行緒呼叫,直接使用起來需要加鎖,不是那麼方便。為此引入執行緒級類xhelper:
classxhelper
;xhanlder不做具體的實現,全部委託給xhelper,把xhelper定義為執行緒級變數:
//stg: static thread global
#if __cplusplus < 201103l
static__threadxhelper*stg_xhelper;
#else
staticthread_localxhelper*stg_xhelper;
#endif // __cplusplus < 201103l
新的實現就完全不用關心多執行緒了:
static bool init_xhelper()
}return stg_xhelper != null;
}void xhandler::foo()
}void xhelper::foo()
c 多函式多文
問大神,大神說每個cpp檔案都要寫乙個寫乙個同名.h檔案,這個應該是針對複雜情況,簡單的情況就是寫乙個.h檔案把全域性變數和會用到的函式寫進去,然後需要呼叫的地方寫 include h 就行。注意 main函式中的變數宣告還要再寫一次的 float a,b,c 這是沒用.h的情況,用的話其實也就是把...
C 多繼承的細節
這幾天寫的程式應用到多繼承。以前對多繼承的概念非常清晰,可是很久沒用就有點模糊了。重新研究一下,重新整理 下記憶。假設我們有下面的 include class a virtual void show virtual void dispa class b virtual void show virtu...
C 多繼承的細節
這幾天寫的程式應用到多繼承。以前對多繼承的概念非常清晰,可是很久沒用就有點模糊了。重新研究一下,重新整理 下記憶。假設我們有下面的 include class a virtual void show virtual void dispa class b virtual void show virtu...