@chaogu
Linux 下呢?有沒有 busy waiting?
@chaogu
我沒有遇到過,你的線程函數長什么樣?用哪種同步機制?
1. 既然對象肯定要用到而且會在main()里邊析構,那么用一個全局的指針不就行了?在main()里邊構造一個局部對象,把全局指針指向它。完全不必用宏,也不必手動釋放對象。
2. 為了防止在別處意外構造對象,把構造函數的參數定為 enum YouShouldNotConstructTheObjectUnlessInMain,這樣一搜源代碼就知道有沒有人故意誤用。
3. 為什么要默認使用虛析構?既然構造函數是private的,說明根本不可能創建派生類的對象,虛析構意義何在?
@dennis-zhuang
> 不支持udp是基于什么考慮?
因為我沒搞過 UDP 編程,沒有一手的經驗。
> timerQueue替換成優先隊列也是O(lg(n))的復雜度吧,而不是O(1)
刪除的復雜度是 O(ln n)。插入的平均復雜度是 O(1),最壞復雜度是 O(ln n)。已訂正原文,多謝。
> 貌似沒有實現基于select的Poller。
確實,因為 select 比 poll 限制更多,有了 poll 和 epoll,沒必要再實現 select。
> 代碼很清晰,感謝。
thanks.
@kk
用 snprintf 是為了避免在堆上分配內存,ostringstream 則正好相反;在多線程程序里,內存分配可能會加鎖,用棧上的緩沖區能避免無謂的加鎖。
用 fprintf 是因為它是線程安全的,cout/cerr 則相反。cerr << a << b; 是兩次函數調用,中間可能會被打斷進行上下文切換,造成輸出內容不連續,插入了其他字符。而 fprintf(stderr, "%s %d", a, b); 是一次函數調用,而且是線程安全的,打印的內容不會受其他線程影響。
另外我沒有見過誰在產品代碼里用 iostream。
目前 Google 公開的大量 C++ 代碼都遵循了這份規范。
這些公開的代碼的質量都很高,值得借鑒。
re: 對 C++ 歷史的個人觀點 陳碩 2010-04-09 11:03
@欲三更
這正好證明了我的觀點,如果標準庫里沒有,每個第三方 library 都會自己造一套。
std::string 加入標準大約是在 1994 年,然后又被 STL 拖延,到 1998 年標準才發布。
而 QT, ACE, MFC 的開發均早于 std::string。
QT 是 1991 年開始開發,MFC 最早在 1992 年發布,1993 年 ACE 的版本號已經升到了 2.12。
假如 C++ 在 1985 年提供 string,還會造成這樣天下大亂的局面嗎?
re: 對 C++ 歷史的個人觀點 陳碩 2010-04-07 00:26
@OwnWaterloo
已在正文中答復。
re: 多線程服務器的常用編程模型 陳碩 2010-02-18 23:05
@coder
在我的 Ubuntu 9.10 + Evince Document Viewer 2.28.1 下看沒有問題。
請你用的哪個 Linux 發行版?什么版本的 PDF 閱讀器?