對於單例類,大家應該不陌生吧,但是要用好,還是要資訊一些,否則出現記憶體洩漏都弄不明白為什麼。
題目是這樣的:手寫單例模式
剛入it行業的人多半會以為人家考察的是你對設計模式的理解,其實別人還有另一層深意。
如果只是這樣寫:
class singleton
return instance;
}private:
static singleton* instance;
singleton(){}
}
會有什麼問題?思考一下
如果你的程式只有乙個執行緒用到它,這樣寫完全沒問題,甚至還是比較好的設計;但如果在多執行緒情況下呢?
現在有2個執行緒同時訪問這段**,很不幸,他們都進入了為空的判斷的**段裡,接下來,他們各自new乙個物件出來並執行賦值,最後,有一塊堆內存在你不經意間遨遊神州大地去了,不歸你管了。
如何解決呢?
class singleton
pthread_mutex_unlock(mtk);
} return instance;
}private:
static pthread_mutex_t mtk;
static singleton* instance;
singleton(){}
}
現在,即使你都進去了為空的**段裡面,也不會出現多個執行緒都各自new物件的情況。
這裡考察的有三個點:
1)對static理解是否通透
2)單例設計模式
3)執行緒安全設計
可能有人會問,不會吧,你連這個都不知道;非也,我當時採用的是另一種做法,不過沒有這個方案好就是了。我們當時在程式進行初始化的時候就已經將每乙個單例類的getinstance執行了一遍(當然也有安全檢測),所以後邊根本不會進入到那段**段裡,當然這裡會帶來乙個問題,程式啟動慢,而且部分單例類如果你一直用不到的話,就會浪費記憶體空間(多出現在維護和優化**過程中對**的精簡,工作中不用的**一般是不會刪除的,要麼不用,要麼注釋掉,stl就如是做的)
最後說下51期間,我在花城廣場見到的乙個新玩意:無人售賣車,以前是售賣機對不對,不能動的;現在出車了,都不需要你自己走過去了,它自己走過來。唉,想想不久的未來,是不是連田都是機器種的,沒工作的只能找個地躺屍了(t_t)
程式設計是比較有意思的事情
這些天一直在實驗室幹活,忙得不行,所以也沒時間來寫部落格,今天有時間了,先寫點對程式設計的體會。最近逐漸感覺程式設計是比較有意思的事情,它有意思在於讓我們比較有創造力。記得上個學期一來,由於深感教育網上國外 要上 上國內網 特別是教育網的 為了速度又要去掉 的麻煩,於是就寫了乙個ie的 指令碼,到網...
幾個比較有意思的邏輯問題
誠實者與說謊者的問題 現有a和b兩扇門,其中有乙個是我要開啟的,即正確的門,有乙個是錯誤的門,有兩個守門員a和b,他們兩都知道正確的門和錯誤的門,他們會告訴你答案但是它他們有乙個是誠實的,有乙個是說謊的。現要求,只能問他們其中乙個人乙個問題,怎麼才能開啟正確的門。海盜分金問題 5個海盜 abcde ...
一些比較有意思的題目
example 輸入 698592 k 4 輸出 6592 solution 一種比較常見的思路是列舉全部k 4的數字,然後再取最小值,然而這樣複雜度會很高。本文的思路是不斷遞迴求得最小值,注意邊界,可以顯著降低複雜度。void find min core vector vec,int k,int ...