原创 多線程爲什麼要Double-Check Locking

public static Singleton Value{     get {         // Has the singleton object already been created?         if (s_value

原创 輔助線程與後臺線程

在一個多線程應用程序中,讓所有的輔助線程 (worker thread)完成相同的工作是最簡單的情況。輔助線程是那些正在完成與保持應用程序在響應狀態無關的處理活動的線程,並且既可以是手工創建的線程又可以是線程池線程。 輔助線程不等同於後臺

原创 C#的 GC工作原理基礎

作爲一位C++出身的C#程序員,我最初對垃圾收集(GC)抱有懷疑態度,懷疑它是否能夠穩定高效的運作;而到了現在,我自己不得不說我已經逐漸習慣並依賴GC與我的程序“共同奔跑”了,對“delete”這個習慣於充當罪魁禍首的關鍵字也漸漸產生

原创 C++ const 指針

const在面試的時候考得多,特地小結一下。 1,const是修飾符,它表示某個對象是常量,即不能修改,而C++沒能徹底拋棄指針這個C留下的遺產而有些尷尬,指針是比較圓滑的傢伙,它有雙重身份,有時表示它自己,有時表示它所指的對象(所

原创 STL set實際上是個二叉搜索平衡數

stl的set是維護一個有序不重集合,用rbtree實現的,所以插入效率爲nlogn; set的插入效率不高的,set用紅黑樹作內部數據結構,插入和刪除節點時,有可能導致節點被重新着色或者旋轉,最壞情況下,單次刪除時間複雜度爲O(l

原创 暴雪 hash

int GetHashTablePos(char *lpszString, MPQHASHTABLE *lpTable, int nTableSize) {   const int HASH_OFFSET = 0, HASH_A =

原创 throw an exception

When implementing your own methods, you should throw an exception when the method cannot complete its task as indicate

原创 進程間通信---命名管道

函數原型:int mkfifo(const char *pathname, mode_t mode); 函數說明:創建一個命名管道,如果成功則返回0,,否則返回-1   函數原型:int open(const char *pat

原创 TCP掃描器的簡單實現

//TcpPortScanner.cc   #include <iostream>   #include <strings.h>   #include <stdlib.h>   #include <sys/socket.h>   #

原创 C指針的初始化與賦值

1、指針的初始化 初看起來,指針的初始化和賦值好像很混亂,又是*,又是&,時不時又出來一個數組。其實總結起來很簡單: int *p; int a=25; int b[10]; int *m=&a; int *n=b; i

原创 段錯誤的處理

編譯時遇見了段錯誤, 很多時候新手都會發現段錯誤,其實都是內存分配錯誤引起的: 即用定義指針直接賦值的,那麼char *p="aaa",其實和const char *p ="aaa";是一樣的,都在常量區,處於靜態存儲區,是隻讀

原创 拷貝構造函數的作用

拷貝構造函數,經常被稱作X(X&),是一種特殊的構造函數,他由編譯器調用來完成一些基於同一類的其他對象的構件及初始化。它的唯一的一個參數(對象的引用)是不可變的(因爲是const型的)。這個函數經常用在函數調用期間於用戶定義類型的值傳遞

原创 threads開銷很大

創建一個線程並不省事,一個線程內核對象被構造並初始化,每一個線程被預留有1MB的尋址空間當做用戶態的堆棧,和12KB的內核態堆棧,當創建完一個線程時,windows對於進程中的每個dll都調用一個方法告訴這些dll一個新的線程被創建了。

原创 hash索引和btree索引的區別

 索引結構的特殊性,其檢索效率非常高,索引的檢索可以一次定位,不像B-Tree 索引需要從根節點到枝節點,最後才能訪問到頁節點這樣多次的IO訪問,所以 Hash 索引的查詢效率要遠高於 B-Tree 索引。 可 能很多人又有疑問了,既

原创 linux 查找字符串

find /usr/linux -name "*.h" | xargs -n50 grep SYSCALL_VECTOR